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:

分析到此结束:后面步骤涉及结果集的分装