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:
分析到此结束:后面步骤涉及结果集的分装