[Mybatis]-[核心处理层]-概述

该系列文章针对 Mybatis 3.5.1 版本

一、回顾-基础支持层

回顾一下 Mybatis  整体架构,如下图:

该图片来自《Mybatis 技术内幕》

[Mybatis]-[核心处理层]-概述

在前面章节中,重点剖析了 “基础支持层“。

基础支持层读取配置文件信息、构建起了整个 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]-[核心处理层]-概述

如上述 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/p/89791

发表评论

登录后才能评论
侵权联系
返回顶部