该系列文章针对 Mybatis 3.5.1 版本
一、回顾-基础支持层
回顾一下 Mybatis 整体架构,如下图:
该图片来自《Mybatis 技术内幕》
![[Mybatis]-[核心处理层]-概述](https://www.zyxiao.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
在前面章节中,重点剖析了 “基础支持层“。
基础支持层读取配置文件信息、构建起了整个 Mybatis 运行期间的所有数据,如:SQL语句、运行时配置、数据源、数据库字段与Java对象之间的映射关系等。这些数据被聚集,并整合到了 Configuration
对象中。
除了这些数据信息、基础支持层还提供了 Mybatis 框架运行的相关工具,如:缓存支持组件,并以装饰者的方式提供了缓存组合套件。除此之外,基础支持层还提供了对市面上大多通用日志组件的支持。
基础支持层提供了 Mybatis 运行期间的所有数据,以及工具,这时候就轮到 ”核心处理层“。
二、核心处理层
”核心处理层“ 借助 ”基础支持层“ 提供的数据(SQL、运行期间数据等)以及工具(缓存支持、日志等),构建起了程序代码与数据库之间的桥梁,通过这些工具与数据实现程序与数据库之间的数据通讯。
简单来讲,”核心处理层“ 完成的工作分为三步:
1、组装 SQL
2、执行 SQL
3、根据结果集进行映射。
”核心处理层“ 根据不同的分工组合,抽象并定了几大组件类:
- ExecutorExecutor 本身不进行 SQL 语句的操作执行,Executor 维护了 SQL 执行过程中 一级缓存 和 二级缓存 ,并提供事务管理等相关功能。
- StatementHandlerStatementHandler 负责 SQL 拼接、SQL 执行 和最后的结果集映射。
StatementHandler 是一个中转处理器本身并不实现 SQL 相关操作,StatementHandler 通过整合如下几个组件,完成了 SQL 的拼接、SQL 的执行 和最后的结果集映射- ParameterHandler负责 SQL 参数拼接,组装完整的 SQL 语句
- java.sql.StatementJDBC SQL 语句执行类
- ResultSetHandler将结果集动态映射成程序代码,如:映射成 Java 中的 Java Bean
三、JDBC 原生API对比核心处理层
核心处理层需要完成的就是 SQL 的执行。
从本质上来说核心处理层就是对 JDBC 原生 API 更高级的封装。
以通过用户ID查询用户信息对应的 JDBC 代码实现为例
相关代码实现如下:
![[Mybatis]-[核心处理层]-概述](https://www.zyxiao.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
如上述 JDBC 原生 API 代码实现,执行 SQL 操作,需要如下几个步骤:
- 1、获取链接 Connection
- 2、根据 SQL 构建预处理对象 PreparedStatement
- 3、设置 SQL 参数
- 4、如果需要手动操作事务,还需要开启事务
- 5、执行 SQL 获取结果集 ResultSet
- 6、将结果集映射到我们指定的对象中
- 7、如果手动开启事务,此时需要提交事务
- 8、关闭连接
Mybatis 核心处理层对应JDBC步骤如下:
- 2、构建 Statement(包括:PreparedStatement、CallableStatement等)
- 3、SQL 参数设置到对应的 Statement 中
- 5、通过 Statement 执行 SQL
- 6、结果集映射
其余关于 JDBC 链接获取,事务操作,借由“基础支持层”构建的数据源支持,核心处理层只使用,并不构建相关对象。
核心处理层针对这些操作都进行了职责划分
- StatementHandler :用来构建 Statemetn(包括:PreparedStatement 等)
- ParameterHandler :用来完成 SQL 参数设置
- ResultSetHandler :用来完成结果集映射
除了上述三个组件类,Mybatis 还提供了执行器 Executor,Executor 用来组合 StatementHandler、ParameterHandler、ResultSetHandler 完成 SQL 的拼接、执行、结果集映射。
除此之外 Executor 还提供了 一级缓存、二级缓存、事务管理等功能。
以上几个组件组成了核心处理层关于执行 SQL 的流程,相关逻辑图如下:
图片来自《Mybatis 技术内幕》
![[Mybatis]-[核心处理层]-概述](https://www.zyxiao.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
后面的章节根据上述图示,进行剖析。
来源:花好夜猿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/89791