该系列文章针对 Mybatis 3.5.1 版本
一、Mybatis 整体架构
ORM 框架的产生,是为了解放生产力,提高代码的复用性,于是在 JDBC 上进行一层层抽象优化,随着抽象内容越来越多,为了使得代码更易于维护,职责更清晰,慢慢的将代码根据细化的职责进行模块化,从而形成 ORM 框架。
Mybatis 便是其中一个。
Mybatis 代码抽象模块大体分为三层结构
-
接口层
-
核心处理层
-
基础支持层
如下图(图片来自《Mybatis技术内幕》)
1.1、接口层
接口层是 Mybatis 对外提供数据库访问操作的门户,而充当门户的是 SqlSession
接口类。
·SqlSession· 接口类图如下:
接口层提供了基础API 如下:
1、增(insert)、删(delete)、改(update)、查(select)
提供了基础的自定义 SQL 操作
2、getMapper
获取 SQL 查询 API
3、getConnection、commit、rollback 等
Mybatis 封装了 JDBC 操作,但是仍然支持 JDBC 原生API
4、getConfiguration
Configuration 贯穿了Mybatis 整个运行期间,Configuration 包含了 Mybatis SQL语句,Mapper API 等几乎所有的数据,所有获取到了 Configuration ,相当于获取到了 Mybatis 运行期间所有的数据。
总的来说:SqlSession 提供了封装好的增删改查的接口,支持 JDBC 的原生调用 API,支持 Mybatis 原生的调用。
1.2、核心处理层
接口层的门户是 SqlSession
, SqlSession
提供 API 操作入口,也是整个 Mybatis 框架操作的入口。
核心处理层存在的意义就是用来处理从接口层传入的关于 Mybatis 相关操作的执行指令(因为接口层支持原生 JDBC 的API操作,原生 JDBC API 操作不受 Mybatis 管辖)。
而核心处理层主要的操作就是将操作指令转换成 SQL 语句,然后执行SQL语句,最后进行结果集的映射。
核心处理层的操作包括但不限于:
-
SQL 参数动态设置
-
SQL 执行
-
SQL 执行结果动态结果集映射
核心处理层围绕两个关键的类:
-
Configuration
Configuration 持有了Mybatis 运行期间所有的数据,包括 SQL 模板,结果集映射数据等。 -
Executor
Executor 翻译为 执行器,是发起 SQL 操作的执行入口
1.3、基础支持层
接口层提供访问 API,核心处理层用来处理 API 请求,发起数据库调用。
以上两层构成了 Mybatis 访问数据库的整个操作,但是数据库的操作除了这些流程外,还需要基础支持,如:配置文件加载解析支持,缓存算法支持,日志记录支持等。
前面提到 Mybatis 的运行时数据,包括 SQL 语句,Java对象和数据库映射关系都存储在 Configuration
对象中,而这些数据都是以Java对象,或者 XML等格式的文件形式存在,而基础支持层的工作之一就是将这些文件,转换为对象。
还有缓存算法支持可以用来提高框架整体性能,日志记录用来观察框架整体运行情况
二、总结
Mybatis 运行图如下:
针对 Mybatis 的整体架构可以分为三层:接口层、核心处理层、基础支持层。
每层之间相互关联,或者可以说下层基础决定上层建筑。
最底层的“基础支持层”,将所有配置信息,加载解析并封装到对象中,供其上层“核心处理层”使用。如:缓存策略,日志功能,SQL语句等。
“核心处理层” 通过 “基础支持层”提供的基础数据,执行数据库操作,为其上层“接口层”提供了 API 实现。
“接口层” 为用户使用的API层,提供有 原生 JDBC API,Mybatis 操作 API。
更多文章实时更新,关注公众号!