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是一个接口,接口中定义了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开发过程

1、编写mybatis的配置文件SqlMapConfig.xml

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

         这里主要是定义了statement和sql语句

3、编程通过配置文件创建SqlSessionFactory

4、通过SqlSessionFactory获取SqlSession

5、通过SqlSession操作数据库

         如果执行添加、更新、删除需要调用SqlSession.commit()

6、SqlSesion使用完成要关闭



3.Mapper代理的开发规范

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

UserMapper.xml




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


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

3、 mapper接口的方法参数类型要和mapper映射文件的statementparameterType的值一致。

4、 mapper接口的方法返回值类型要和mapper映射文件的statementresultType的值一致



 4.开发

  【1】Mapping接口

public interface UserMapper{
	//1.根据用户ID查询用户信息
	public User findUserById(int id) throws Exception;

	//2.添加用户
	public void insertUser(User user) throws Exception;
	
	//3.根据用户名字查询用户信息
	public List findUserByName(String username) throws Exception;
  }

【2】Mapper映射文件

config下创建mapper目录然后创建UserMapper.xml

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

  

     
    


     

     
        
         select LAST_INSERT_ID()  
        
       
      INSERT INTO USER(username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address})  
     


     
   

【3】加载映射文件

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

   Mybatis Mapper代理的开发方式_第1张图片


    【4】测试代码

     Mybatis Mapper代理的开发方式_第2张图片

小结:

代理对象内部调用selectOne或selectList

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

 如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库。

你可能感兴趣的:(Mybatis)