day02_Mybatis_DaoImpl
# day02_Mybatis_DaoImpl
1.探究findAll()方法调用过程
第一步:
图示:1.sqlSession.selectList
点击上图中selectList可知,其为SqlSession接口中的一个抽象方法
如图
第二步(2):
既然是DefaultSqlSession类实现了该接口,自然要实现SqlSession接口中的方法,很自然的想法就是去看一看DefaultSqlSession类中的方法
进入到DefaultSqlSession内部去看看
找到selectList方法:
第三步:探究第3个selectList()
点击query进去如图:(改:这是抽象类中的一个方法)
接下来就是探究又是哪一个类实现了该接口中的方法,采用打断点调试
如图
第四步:自然而然想到进入到CachingExecutor类中去查看query()方法
如图:
进入方法如图:(改:从断点1直接跳到断点3)
第五步:自然想到是到SimpleExecutor中去看一下该query()方法的实现
如图所示
第六步:自然想到到BaseExecutor中寻找query()方法的实现
如图:BaseExecutor中的query()方法
点进DqueryFromDatabase去看看:
如图:
点进doquery()方法去看看:
如图:
到这里,可知道BaseExecutor类中的doQuery()被子类SimpleExecutor实现,所以query实际执行是SimpleExecutor中的doQuery方法。
第七步:自然想到到去查看SimpleExecutor中的doQuery方法
SimpleExecutor中的doQuery方法:
如图:
StatementHandler接口:
打断点调试看是哪一个类实现了上述接口:
如图:RoutingStatementHandler实现了Statement接口中的query()方法。
第八步:很自然找到RoutingStatementHandler去看看query()的实现方法
如图:RoutingStatementHandler实现了接口Statementhandler
如图:StatementHandler接口中query方法
如图:RoutingStatementHandler类中的query()方法
第九步:到PreparedStatementHandler类中去看看
在该query方法中使用了execute()执行了查询方法,底下return是对查询方法结果集封装的返回。
第十步:对返回结果集进行探索
点进hanleResultSets()方法,如图:
查看DefaultResultSetHandler:
分析到此结束:后面步骤涉及结果集的分装
本文作者:远道而重任
本文链接:https://www.cnblogs.com/rong-xu-drum/p/15891956.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步