(1)点击测试案例进入到UserDaoImpl 的 findAll 方法内
(2)进入findAll方法,发现这里的sqlSession 实际上是一个 DefaultSQLSession对象,而DefaultSqlSession 实际是SqlSession 接口的一个实现类(就如同自定义Mybatis
的过程调用顺序一样)
(3)选中SqlSession,Ctrl+Alt+B 找到实现类 DefaultSqlSession,跟入进去
(3)发现最后跳转的这个 executor.query,又是一个接口,而且跳转的是这个接口的 CachingExecutor 实现类
(4)同样的方法,选中这个接口,进入它的实现类
发现它又走了个query方法,继续通过断点调试进入这个query方法
发现这里最后又跳转到了Executor接口的实现类SimpleExecutor 中,同样进入这个是实现类
(5)进入SimpleExecutor,发现并没有query方法,但是发现该类继承了BaseExecutor抽象类
这个抽象类中含有query方法,
该query方法又跳到了queryFromDatabase 中
该方法又调用了doQuery 方法
由于该类是个抽象类,doQuery 是个抽象方法,所以就跳入到了 SimpleExecutor 内的doQuery 方法,又跳到了RoutingStatementHandler 方法内
(6)继续步入:RoutingStatementHandler
(7)步入PrepareStatementHandler
可以看到此处的PrepareStatement 即是我们知道的 JDBC 操作类,到这则会具体执行SQL代码操作
Mybatis传统实现Dao查询所有的执行过程分析
最新推荐文章于 2023-05-18 10:39:20 发布