目标:
从整体上了解MyBaits框架,并通过debug过程分析启动过程中涉及到的一些关键节点。
MyBaits 相比原生JDBC 有了哪些改进
通过这篇文章, 看看原始的JDBC访问数据库方式,和使用mybatis框架访问数据库方式的差异。我们会发现框架给人带来了很大的方便。主要是下面几点:
- 连接获取和释放
- SQL统一存取
- 传入参数映射和动态SQL
- 结果映射和结果缓存
MyBatis框架整体设计
接口层
负责和应用层之间做交互,提供api接口给到用户调用,执行常见的增删改查,我们常见的mapper接口实际就是该层的。
数据处理层
通过传入参数,构建动态SQL语句;
SQL语句的执行以及封装查询结果集成List
框架支撑层
事务管理机制
连接池管理机制
缓存机制
SQL语句的配置方式
主要构件及其相互关系
SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能;
Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护;
StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数;
ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler:负责java数据类型和JDBC数据类型之间的映射和转换;
MappedStatement:MappedStatement维护了一条节点的封装;
SqlSource:负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回;
BoundSql:表示动态生成的SQL语句以及相应的参数信息;
Configuration:MyBatis所有的配置信息都维持在Configuration对象之中;
MyBatis初始化机制
初始化入口
我们都知道使用mybatis的时候回有一个配置文件mybatis-config.xml ,mybait框架的初始化也是从这个配置文件开始的。
如果你是用的spring的话,在spring的配置文件中往往会有初始化sqlSessionFactory的过程。而在实例化sqlSessionFactory的过程中就会解析我们前面提到的配置文件(mybatis-config.xml),也是我们需要重点分析的部分。
核心配置文件的解析
主要是把配置文件里面的一个个节点分别解析到Configuration对象内保存。我们重点分析第10点,映射器的解析。
映射器的解析
映射器就是我们应用内写的一个个mapper 以及他的xml文件。MyBaits 会通过XMLMapperBuilder对象来对这类xml文件解析。类似的如下图,包括三个builder对象,xmlconfigbuilder 是用于前面mybatis-config.xml 文件解析,用户定义的这类包含了sql的xml文件解析则是通XMLMapperBuilder实现,statementbuilder 的用法我们后文会提到。
解析mapper文件和核心方法入口
下面是具体到如何将一个xml中的 sql封装为一个MappedStatement 对象
最后将mapperstatement对象存到configuration.addMappedStatement(statement); 统一管理。
我们来debug看下最终生成的mapperstatement都有些什么参数。
下面再看看sqlSource对象。
最终所有的sql都会解析到Configuration对象里面
是不是一目了然?如果有什么疑问,欢迎在评论区提出~
欢迎点赞、关注、转发,最近我在整理各大厂的Java技术分享资料,包含面经、项目框架拆解等,如有需要,私信我获取。