初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
Mybatis使用代理dao的执行过程 findAll流程分析
这里举例是想查找到SelectList方法这样就和上一P讲的后面是一样的了
如何找到呢?不同于使用dao实现类的执行流程是什么呢?
一步步来看
我们现在只关心创建代理对象 也就是getMapper这个方法
跟进去 并且按住ctrl+shift+H 进入DefaultSqlSession
找到对应的方法
也没有创建代理对象的操作,所以我们再跟进去
继续
跟进去,再跟发现两个方法是挨着的
发现这不就是动态代理吗????(虽然说我第一时间也没反应过来
单独拿出来分析
动态代理方法分析
三个参数分别为:类加载器 实现了接口 如何代理
我们关注的点就是如何代理
我们跟进去,也就是MapperProxy类
(我代理没怎么学,大家应该比我清楚)
由于实现了InvocationHandler的接口
执行被代理对象的任何方法都会经过这个方法,并且做了mapperMethod.execute
继续跟进去
到了这里就很明白了,举例说明findAll方法,我们进入executeForMany
成功找到SelectList
这里还是附上一张网课老师画的流程图 更清晰点
总结
为什么mybatis能不写dao呢,其实就是它在给我们想办法调用我们自己写dao的那些方法。
它能给我们调用,我们就可以不用去写dao了
起飞 芜湖~~~
(点个赞秋梨膏)