前言
mybatis官方推荐使用mapper代理方式开发,程序员不用编写mapper接口实现类,
使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性;
传统的dao层开发容易出现硬编码的问题。
一、传统DAO层开发:
mybatis传统DAO层开发存在的问题:
1.dao接口中存在大量模版方法,增加工作量。
2.调用sqlSession方法时将statement的id硬编码了
3.调用sqlSession传入的变量,由于sqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序开发。
二、mapper代理开发Mapper接口:
mapper代理开发和传统开发主要的区别在于
1. 接口不用实现
2. mapper文件的namespace有意义,必须与mapper接口类路径一致。
3. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
4. mapper接口方法名的输入和输出参数必须和mapper.xml中定义的类型一致。
其实学习完mapper代理开发之后,可能你还存在一个疑问,就是返回的结果如果是list,代理内部会怎么判断?
- 代理内部会自动判断,如果返回list那么就调用sqlsession的selectlist方法,如果是对象,就调用sqlsession的selectone方法。
总结:mapper代理开发不用写实现类,节省了我们的代码量;mapper代理对象减少了我们的硬编码,使编码更加灵活。
---------------------------------------------------------------------------------------------------------------------------------------------------
下面是一个编写dao层实现类Mybatis的执行过程
参考:https://blog.csdn.net/changyinling520/article/details/78102734