这MyBatis究竟底层的实现原理是啥啊?

 自己钻研钻研

这MyBatis是如何通过接口找到对应的xml文件的啊?
好家伙,直接开始扒源码

 

朝getMapper往里点。 

进入到了DefaultSqlSession.class,哪里不会点哪里继续点。

又来一个,继续点

这会儿终于出现逻辑代码了,硬着头皮开始看。
这个函数分两部分来看,首先是从map集合中获取接口代理,map集合的来源,第二部分获取代理后实例化,获取接口的方法,执行sql。
其中第一部分的集合是如何导入的,就得从addMapper方法说起了

往上追溯该方法的调用是在SqlSessionFactory.build();时对配置文件的解析,其中对节点mappers的解析。

这步是通过全路径来查找对应的xml。
第二部分的代码主要就是通过动态代理获取接口名字来对应xml中的id。
最后则是在MapperProxy.java中进行方法的执行,通过invoke,实际调用了excute进行对sql语句的执行。

总结

    1)解析xml文件时,将Mapper type和MapperProxyFactory的对应关系封装到Configuration中,以备后面使用

    2)在SqlSession.getMapper(type)时,就是从Configuration中获取type对应的MapperProxyFactory

    3)MapperProxyFactory用于获取MapperProxy

    4)MapperProxy是一个动态代理类,真正的实现还是交由SqlSession来处理
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值