现在的位置: 首页 > 综合 > 正文

MyBatis框架的使用

2014年11月22日 ⁄ 综合 ⁄ 共 16173字 ⁄ 字号 评论关闭

使用步骤

1.导入jar包 

除了mybatis的jar包外,还需要动态代理用到的jar包,数据库要用到的jar包

2.建立源代码文件夹,并在其下建立mybatis-config.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"    
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <!--配置项主要有三项:别名,应用环境,mapper文件位置-->  
  5. <configuration>  
  6.     <!--对完全限定名较长的类,可在这里对其起别名(一般取类名),供mapper文件使用-->  
  7.     <typeAliases>  
  8.         <typeAlias type="com.kaishengit.entity.User" alias="User"/>  
  9.         <typeAlias type="com.kaishengit.entity.News" alias="News"/>  
  10.     </typeAliases>  
  11.       
  12.     <!--对应用环境的配置,因为同一个项目可能需要在不同的环境下运行-->  
  13.     <environments default="dev">  
  14.         <!--对使用的事务管理器和数据源进行配置-->  
  15.         <environment id="dev">  
  16.             <transactionManager type="JDBC"></transactionManager>  
  17.             <dataSource type="POOLED">  
  18.                 <property name="driver" value="com.mysql.jdbc.Driver"/>  
  19.                 <property name="url" value="jdbc:mysql:///mydb"/>  
  20.                 <property name="username" value="root"/>  
  21.                 <property name="password" value="root"/>  
  22.             </dataSource>  
  23.         </environment>  
  24.     </environments>  
  25.     <!--明确所有mapper文件的位置-->  
  26.     <mappers>  
  27.         <mapper resource="com/kaishengit/mapper/usermapper.xml"/>  
  28.         <mapper resource="com/kaishengit/mapper/newsmapper.xml"/>  
  29.     </mappers>  
  30.   
  31.   
  32. </configuration>  

3.在src中建立mapper包(或dao包),编写mapper文件

  1. <!--mapper包相当于DAO包,通过对它的调用来实现对数据的增删改查-->  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5. <!--mapper文件的命名空间只要保证唯一性可以随意起,但如果还要写它对应的接口时,则需要规范命名-->  
  6. <mapper namespace="com.mapper.UserMapper">  
  7.   
  8.   
  9.       
  10.       
  11.     <!--对于select以外的三种操作,很简单:只需要采用相应的结点,写sql语句,配置id和字段类型-->  
  12.     字段类型有两类:①int,String,long型---适用于sql语句中只需要一个变量的情况  
  13.     ②对象---适用于sql语句中需要多个变量的情况(sql语句引用时,只需要写其属性名)  
  14.     <insert id="save" parameterType="User">  
  15.         INSERT INTO t_user(username,PASSWORD) VALUES(#{username},#{password})  
  16.     </insert>  
  17.   
  18.   
  19.     <delete id="del" parameterType="long">  
  20.         delete from t_user where id = #{id}  
  21.     </delete>  
  22.       
  23.     <update id="edit" parameterType="User">  
  24.         update t_user set username = #{username},password = #{password} where id = #{id}  
  25.     </update>  
  26.       
  27.       
  28.       
  29.     对于查询语句,分两类情况  
  30.     ①要查询的对象其属性中【不包含】其他对象或其他对象的集合----只使用select一个结点即可  
  31.     要查询的是对象时:resultType为对象的别名  
  32.     要查询的是对象集合时: resultType为对象的list ??  
  33.     <select id="findById" parameterType="long" resultType="User">  
  34.         SELECT id,username,password FROM t_user WHERE id = #{id}  
  35.     </select>  
  36.       
  37.     ②要查询的对象其属性中【包含】其他对象或其他对象的集合---需要使用resultMap结点与select结点配合使用,要注意保证resultMap结点的id属性值与select的resultMap属性值相同  

  1. resultMap有id,type两个属性,结点下有四类子节点:id与result(都有column与property两个属性,前者表示sql语句查询出的结果集中的列名,后者表示对象的属性名,两者要相对应),collection(有property与ofType属性)与association(有property,column,javaType属性,column表示表格中引用其他表的列名)  

  1.   
  1. 包含其他对象的集合时:  
  2.   
  3. <select id="findByIdwithNews" parameterType="long" resultMap="findUser">  
  4.     SELECT t_user.id,username,PASSWORD,t_news.id AS newsid,title,uid  
  5.     FROM   
  6.     t_user LEFT JOIN t_news  
  7.     ON   
  8.     t_user.id = t_news.uid  
  9.     WHERE t_user.id = #{id}  
  10. </select>  
  11.   
  12.   
  13. <resultMap type="User" id="findUser">  
  14.     <id column="id" property="id"/>  
  15.     <result column="username" property="username"/>  
  16.     <result column="password" property="password"/>  
  17.     <collection property="newsList" ofType="News">  
  18.         <id column="newsid" property="id"/>  
  19.         <result column="title" property="title"/>  
  20.         <result column="uid" property="uid"/>  
  21.     </collection>  
  22. </resultMap>  
  23. lt;/mapper>  


  1. <SPAN style="FONT-SIZE: 24px"><STRONG></STRONG></SPAN><PRE class=html name="code">包含其他对象:</PRE><PRE class=html name="code"><PRE class=html name="code"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.mapper.NewsMapper">  
  5.       
  6.     <cache/>  表示使用缓存  
  7.       
  8.     <select id="findById" resultMap="findByNews" parameterType="long">  
  9.         SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD  
  10.         FROM t_news   
  11.         LEFT JOIN t_user  
  12.         ON t_news.uid = t_user.id  
  13.         WHERE t_news.id = #{id}  
  14.     </select>  
  15.       
  16.     <select id="findAll" resultType="list"  resultMap="findByNews">  
  17.         SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD  
  18.         FROM t_news   
  19.         LEFT JOIN t_user  
  20.         ON t_news.uid = t_user.id  
  21.     </select>  
  22.       
  23.       
  24.       
  25.     <resultMap type="News" id="findByNews">  
  26.         <id property="id" column="id"/>  
  27.         <result property="title" column="title"/>  
  28.         <result property="uid" column="uid"/>  
  29.         <association property="user" column="uid" javaType="User">  
  30.             <id property="id" column="userid"/>  
  31.             <result property="username" column="username"/>  
  32.             <result property="password" column="password"/>  
  33.         </association>  
  34.     </resultMap>  
  35.       
  36. </mapper></PRE><BR><BR></PRE>  

  1.   

4.测试类: ---(Resources.getResourceAsReader(“主配置文件名”))→reader

  ---(new SqlSessionFactoryBuilder().build(reader))→SqlSessionFactory

---(factory.openSession(true))→session

---(session.getMapper(xxxMapper.class))→mapper对象

---(调用session 或mapper的CRUD方法 )→查询结果

最后session要关闭

  1. public class Test {  

  1. public static void main(String[] args) throws Exception {  

  1. Reader reder = Resources.getResourceAsReader("mybatis-config.xml");  
  2.   
  3. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);  
  4.   
  5. SqlSession session = factory.openSession(true);   
  1. true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;  
  1. 若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。  
  2.           
  3.           
  4.         List<News> list = session.selectList("com.mapper.NewsMapper.findAll"); 相当于一个crud方法的位置,实际上是mapper配置文件的相应结点,根据id为findAll找到的,还有一个备用参数,用于传sql需要的参数  
  5.           
  6.         for(News news : list) {  
  7.             System.out.println(news.getId() + "\t" + news.getTitle() + "\t" + news.getUser().getUsername());  
  8.         }  
  9.           
  10.           
  11.           
  12.         /*News news = (News) session.selectOne("com.mapper.NewsMapper.findById", 1L);  
  13.           
  14.         System.out.println(news.getTitle());  
  15.         System.out.println(news.getUser().getUsername());*/  
  16.           
  17.           
  18.         /*  
  19.         User user = (User) session.selectOne("com.mapper.UserMapper.findByIdwithNews", 1L);  
  20.           
  21.         System.out.println(user.getUsername());  
  22.         for(News news : user.getNewsList()) {  
  23.             System.out.println(news.getTitle() + "\t" + news.getId());  
  24.         }  
  25.         */  
  26.           
  27.           
  28.           
  29.           
  30.           
  31.           
  32.           
  33.           
  34.           
  35.           
  36.         /*User user = new User();  
  37.         user.setId(25);  
  38.         user.setPassword("Mybatis");  
  39.         user.setUsername("Struts2");  
  40.           
  41.         int rows = session.update("com.mapper.UserMapper.edit", user);  
  42.         System.out.println(rows);*/  
  43.         /*int rows = session.delete("com.mapper.UserMapper.del", 27);  
  44.         System.out.println(rows);*/  
  45.               
  46.           
  47.       
  1.   
  1.   

  1.   

  1.   
  1. <STRONG style="FONT-SIZE: 24px">    <SPAN style="COLOR: #cc0000">  
  2. </SPAN></STRONG><SPAN style="COLOR: #cc0000; FONT-SIZE: 32px">  <STRONG><EM>另一种写法</EM></STRONG></SPAN><STRONG style="FONT-SIZE: 24px">    
  3.           
  4.         根据mapper文件的命名空间,建立相应的接口,要保证名称(接口名,参数类型,结果类型)一一对应  
  5.           
  6.         public interface UserMapper {  
  7.   
  8.   
  9. <SPAN style="WHITE-SPACE: pre"> </SPAN>                 public User findById(long id);  
  10. <SPAN style="WHITE-SPACE: pre"> </SPAN>  
  11. <SPAN style="WHITE-SPACE: pre"> </SPAN>                 public int save(User user);  
  12.                 }  
  13.           
  14.           
  15.           
  16.           
  17.           
  18.           
  19.         /*  
  20.         User user = new User();  
  21.         user.setPassword("Mybatis");  
  22.         user.setUsername("springmvc");  
  23.           
  24.         UserMapper mapper = session.getMapper(UserMapper.class);  
  25.           
  26.         int rows = mapper.save(user);  
  27.           
  28.         System.out.println(rows);*/  
  29.           
  30.         //session.commit();  
  31.           
  32.           
  33.           
  34.         /*UserMapper mapper = session.getMapper(UserMapper.class);  
  35.           
  36.         User user = mapper.findById(8);  
  37.           
  38.         System.out.println(user.getUsername());*/  
  39.           
  40.         session.close();  
  41.           
  42.     }  
  43. }  
  44. </STRONG>  

抱歉!评论已关闭.