MyBatis中SqlSession的getMapper()方法实现DAO接口的连接逻辑
学习了MyBatis之后,知道SqlSession.getMapper()方法可以帮我们自动实例化DAO层接口,那么是如何实现的呢?之间的连接逻辑是什么,就是因为DAO层接口名和xml映射文件名一致吗?
那么把DAO层接口名修改下,看看和xml映射文件名不一致的情况下会怎样
开始测试
测试一:接口名和映射文件名一致
这是原来的news的dao层接口和news的映射文件,接口名与xml映射文件名是一致的,测试是可以成功的,然后修改dao接口名字如下
单元测试
发现测试是成功的,接口名并不是必须与映射文件名一致,然后去xml看下,发现了这个标签
发现当对接口名做出修改时,namespace的值会自动修改,说明这之间一定有引用关系,那么getMapper()实现接口时会不会时根据这个namespace来做连接逻辑的呢?
那就让接口名和映射文件名一致,namespace的值修改下看看
测试二:接口名与映射文件一致,命名空间名不一致
单元测试
发现抱错,getMapper()方法无法实现接口
总结:接口名并不是必须与xml映射文件名一致,二者是通过mapper标签里的namespace属性来进行连接的。
举个例子:定义接口A,映射文件名叫B.xml,B.xml里的mapper标签namespace=“包名.A”,那么在getMapper(A.class)的到的返回值就是以B.xml里的sql语句实现的A接口
至于方法之间的连接逻辑就是通过标签里的id=“方法名”