在具体分析源码之前,我们先对MyBatis的执行原理以及MyBatis的框架结构有一定的了解,以便能让我们站在一定的高度上看问题。

一.MyBatis的执行原理

MyBatis源码分析:MyBatis概览

 

1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

3、SqlSession对象完成和数据库的交互:
a、用户程序调用mybatis接口层api(即Mapper接口中的方法)
b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象
c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象,使用Paramterhandler填充参数,使用statementHandler绑定参数。
d、JDBC执行sql。

e、借助MappedStatement中的结果映射关系,使用ResultSetHandler将返回结果转化成HashMap、JavaBean等存储结构并返回。

f、关闭sqlsession会话。

(以上内容来自:https://www.cnblogs.com/leduo-zuul/p/10679367.html

 

二、Mybatis的框架结构

MyBatis源码分析:MyBatis概览

                                              (图片来源:《MyBatis技术内幕》)

 

三、 mybatis层次图

MyBatis源码分析:MyBatis概览

(图片来源:https://blog.csdn.net/xudan1010/article/details/53435018

参考博客:

https://www.cnblogs.com/leduo-zuul/p/10679367.html

https://blog.csdn.net/u014745069/article/details/80788127

https://blog.csdn.net/u014745069/article/details/80637402

https://blog.csdn.net/weixin_43184769/article/details/91126687

https://blog.csdn.net/xudan1010/article/details/53435018(重点看)

相关文章: