初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析

Mybatis使用代理dao的执行过程 findAll流程分析

这里举例是想查找到SelectList方法这样就和上一P讲的后面是一样的了
如何找到呢?不同于使用dao实现类的执行流程是什么呢?
一步步来看
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
我们现在只关心创建代理对象 也就是getMapper这个方法

跟进去 并且按住ctrl+shift+H 进入DefaultSqlSession
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
找到对应的方法
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
也没有创建代理对象的操作,所以我们再跟进去
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
继续
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
跟进去,再跟发现两个方法是挨着的
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
发现这不就是动态代理吗????(虽然说我第一时间也没反应过来
单独拿出来分析

动态代理方法分析

初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
三个参数分别为:类加载器 实现了接口 如何代理
我们关注的点就是如何代理
我们跟进去,也就是MapperProxy类
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
(我代理没怎么学,大家应该比我清楚)
由于实现了InvocationHandler的接口
执行被代理对象的任何方法都会经过这个方法,并且做了mapperMethod.execute
继续跟进去
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
到了这里就很明白了,举例说明findAll方法,我们进入executeForMany

成功找到SelectList

初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析
这里还是附上一张网课老师画的流程图 更清晰点
初学Mybatis Part 8 分析Mybatis使用代理dao的执行过程 findAll流程分析

总结

为什么mybatis能不写dao呢,其实就是它在给我们想办法调用我们自己写dao的那些方法。
它能给我们调用,我们就可以不用去写dao了

起飞 芜湖~~~

(点个赞秋梨膏)