Mybatis Mapper代理的开发情势

1.Mapper代理的开发方式      

利用Mybatis开发Dao,日常有三个艺术,即原始Dao开发方法和Mapper接口开发方法。mybatis在进展dao开发的时候,涉及到大姨子妹,分别是SqlSessionFactoryBuilder、SqlSessionFactroy、SqlSession。

伙伴们都理解,SqlSession中封装了对数据库的操作,如:增加和删除改查,通过SqlSessionFactory成立SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创办的

 

a、SqlSessionFactoryBuilder

SqlSessionFactoryBuilder用于创立SqlSessionFacoty,SqlSessionFacoty一旦创立完毕就不需求SqlSessionFactoryBuilder了,因为SqlSession是由此SqlSessionFactory生产,所以能够将SqlSessionFactoryBuilder当成三个工具类使用,最佳使用限制是措施范围即方法体内局地变量。

b、SqlSessionFactory

SqlSessionFactory是1个接口,接口中定义了openSession的例外重载方法,SqlSessionFactory的特等使用限制是一切应用运维时期,一旦创设后能够重复使用,日常以单例形式管理SqlSessionFactory。

c、SqlSession

SqlSession是二个面向用户的接口,
sqlSession中定义了数据库操作,暗中同意使用DefaultSqlSession达成类。

 

SqlSession中提供了恒河沙数操作数据库的措施:如:selectOne(重回单个对象)、selectList(再次回到单个或几个对象),SqlSession是线程不安全的,在SqlSesion完毕类中除了有接口中的方法(操作数据库的格局)还有数据域属性,SqlSession最佳应用场面在格局体内,定义成局地变量使用,相对无法将SqlSession实例的引用位于一个类的静态字段或实例字段中。今日的博文中,作者将重点介绍小伙伴们介绍mybatis中开销dao的三种方法,原始dao的开发格局和mapper代理开发。

    mybatis 中 dao 的开发方法,分别是原始 dao 的付出和 mapper 代理开发,原始Dao开发和Mapper动态代理开发,那二种各有亮点。原始Dao开发:程序员要写Dao和Dao完结,须要些较多的代码,但是相比好精晓。Mapper动态代理:程序员只要求写Mapper接口,然后依照标准实行布置,MyBatis就会自行达成类似Dao达成,缩小模板方法。mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口达成类,使用mapper代理方法时,输入参数能够利用pojo包装对象或map对象,保障dao的通用性。

     那里首要介绍mapping代理开发方式

 

 

2.Mybatis开发进度

 

壹 、编写mybatis的布署文件SqlMapConfig.xml

② 、编写mybatis的映射文件mapper.xml

         那里关键是概念了statement和sql语句

叁 、编制程序通过配备文件成立SqlSessionFactory

4、通过SqlSessionFactory获取SqlSession

5、通过SqlSession操作数据库

         若是执行添加、更新、删除要求调用SqlSession.commit()

陆 、SqlSesion使用到位要关门

 

 

 

3.Mapper代理的开发规范

 

壹 、 mapper接口的全限定名要和mapper映射文件的namespace值一致。

UserMapper.xml

 

 

[java] view
plain
 copy

 图片 1图片 2

  1. <?xmlversion=”1.0″encoding=”UTF-8″?>  
  2. <!DOCTYPEmapper  
  3. PUBLIC”-//mybatis.org//DTDMapper 3.0//EN”  
  4. http://mybatis.org/dtd/mybatis-3-mapper.dtd"&gt;  
  5. <!–namespace命名空间,为了对sql语句举行隔开分离,方便管理,mapper开发dao方式,使用namespace有特殊功能  
  6. mapper代理开发时将namespace钦赐为mapper接口的全限定名  
  7.  –>  
  8. <mapper namespace=”cn.itcast.mybatis.mapper.UserMapper”>  

 

此步骤目标:通过mapper.xml和mapper.Java进行关联。

 

2、 UserMapper.xml中statement的id正是mapper.java中的方法名

叁 、 mapper接口的情势参数类型要和mapper映射文件的statement的parameterType的值一致。

④ 、 mapper接口的点子再次来到值类型要和mapper映射文件的statement的resultType的值一致。

 4.开发

  【1】Mapping接口

 

[html] view
plain
 copy

 图片 3图片 4

  1. public interface UserMapper{  
  2.     //1.依据用户ID查询用户音信  
  3.     public User findUserById(int id) throws Exception;  
  4.   
  5.     //2.添加用户  
  6.     public void insertUser(User user) throws Exception;  
  7.       
  8.     //3.根据用户名字查询用户音讯  
  9.     public List<User> findUserByName(String username) throws Exception;  
  10.   }  

【2】Mapper映射文件

在config下开创mapper目录然后成立UserMapper.xml

namespace和mapper接口的全限定名一致

 

[java] view
plain
 copy

 图片 5图片 6

  1. <mapper namespace=”cn.itcast.mybatis.mapper.UserMapper”>    
  2.   
  3.    <!–  依据id查询用户消息  
  4.       id:唯一标识三个statement    
  5.       #{}:表示二个占位符,要是#{}中传播简单类型的参数,#{}中的名称随意    
  6.       parameterType:输入参数的档次,通过#{}接收parameterType输入的参数    
  7.       resultType:输出结果类型,不管重返是多条如故单条,钦定单条记录映射的pojo类型    
  8.     –>    
  9.    <select id=”findUserById” parameterType=”int” resultType=”com.itheima.mybatis.po.user”>    
  10.       SELECT * FROM USER WHERE id= #{id}    
  11.    </select>   
  12.   
  13.   
  14.    <!– 添加用户    
  15.      parameterType:输入参数的体系,User对象包涵username,birthday,sex,address    
  16.      #{}接收pojo数据,能够运用OGNL解析出pojo的属性值    
  17.      #{username}表示从parameterType中赢得pojo的属性值    
  18.      selectKey:用于开始展览主键重回,定义了获得主键值的sql    
  19.      order:设置selectKey中sql执行的逐条,绝对于insert语句来说    
  20.      keyProperty:将主键值设置到哪些属性    
  21.      resultType:select LAST_INSERT_ID()的结果类型    
  22.    –>    
  23.   
  24.    <insert id=”insertUser” parameterType=”cn.itcast.mybatis.po.User”>    
  25.       <selectKey keyProperty=”id” order=”AFTER” resultType=”int”>    
  26.          select LAST_INSERT_ID()    
  27.       </selectKey>    
  28.          
  29.       INSERT INTO USER(username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address})    
  30.    </insert>    
  31.   
  32.   
  33.    <!– 根据用户名称查询用户新闻,大概回到多条    
  34.     ${}:表示sql的拼凑,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。     
  35.     –>    
  36.    <select id=”findUserByName” parameterType=”java.lang.String” resultType=”cn.itcast.mybatis.po.User”>    
  37.       select * from user where usernamelike ‘%${value}%’    
  38.    </select>  
  39. </mapper>  

 

【3】加载映射文件

 

  在SqlMapConfing.xml中加载UserMapper.xml,借使将和spring整合后,能够应用整合包中提供的mapper扫描器,此处的mappers不用配置了。代码如下所示:

   图片 7

 

    【4】测试代码

     图片 8

小结:

代办对象内部调用selectOne或selectList

 假如mapper方法再次回到单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。

 要是mapper方法重临集合对象,代理对象内部通过selectList查询数据库。

网站地图xml地图