接上篇 mybatis焦点运行流程之第三阶段--mybatis数据库数据读写设计,上次还留有一个主要的模块,也就是sqlSession举行数据库操作后,对效果集举行剖析、映射和转换成POJO的历程代码剖析。今天我们就来为此做个圆满收尾,同时也是完成前几篇文章提出那个问题的最后环节解答。

焦点运行流程

对数据库读写阶段的设计还有这最后一个模块了,凤凰涅槃就在此举~~ 最后阶段没有太多的弯弯绕绕、设计套路、目的很明确! 有了前面的基础组件设计和流程的剖析和铺垫,最后一搏应该豁然开朗才对。~ 我们直指源码吧!

源码剖析

先找准剖析的入口: PreparestatementHandler-->query()方式

焦点处置接口ResultSetHandller

进入DefaultResultSetHandler-->handleResultSets()方式,此方式是ResultSet映射和转换的焦点骨架方式

读上面的代码我们也许可以得知:

1. mybatis要转换后的效果集,可能是一个多效果集List容器;

2.首先从效果中获取第1个效果集ResultMap举行剖析,最终效果放入multipleResults容器;

3.效果集焦点处置方式handleResultSet()方式;

进入内核处置方式: DefaultResultSetHandler-->handleResultSet()

进入内核处置方式: DefaultResultSetHandler-->handleRowValues()

在一样平常开发中,通俗效果集使用场景更多一些,这里进入handleRowValuesForSimpleResultMap()方式

读以上代码,我们可以得知效果集映射的流程为:

1.首先凭据分页信息(mybatis内置的内存分页),提取也数据举行映射;

2.分页遍历每一行纪录,通过getRowValue()映射单行纪录成工具;

3. 通过storeObject()方式保留,行映射转换效果;

接下来,我们重点来看看getRowValue()方式的映射实现

从以上的代码,我们可以理出一个对照直观处置脉络

对未指明映射规则的列,举行自动映射

对已指明映射规则的列,举行映射

OK, 看到以上的焦点代码,是不是对ResultSet举行效果集映射的算法思绪和流程都了如指掌了?打完收工,以下我们凭据以上的脉络,绘制出ResultSet效果集映射焦点挪用链路图,人人再过一遍!

总体挪用链路

总结

到这里mybatis三个阶段的焦点运行流程的源码剖析就所有完毕了。希望能为读源码的同砚提供这样一种源码思绪:(1)首先看清楚源码的骨架和基础设施,学习它们的头脑和设计技巧;(2)但凡框架级源码都对照多,剖析全量的源码不太现实(时间成本也太高),应该找常用或焦点营业模块,理顺其整体运行流程;(3)在前两步的基础上,重点剖析感兴趣设计的优缺点,从而提升自己的架构和设计能力! 今天的源码分享就先到这里,更多源码和干货,请继续关注!