# MyBatis 源码分析(一):MyBatis 简介和整体架构
# MyBatis 简介
MyBatis
是一款旨在帮助开发人员屏蔽底层重复性原生 JDBC
代码的持久化框架,其支持通过映射文件配置或注解将 ResultSet
映射为 Java
对象。相对于其它 ORM
框架,MyBatis
更为轻量级,支持定制化 SQL
和动态 SQL
,方便优化查询性能,同时包含了良好的缓存机制。
# MyBatis 整体架构
# 基础支持层
- 反射模块:提供封装的反射
API
,方便上层调用。 - 类型转换:为简化配置文件提供了别名机制,并且实现了
Java
类型和JDBC
类型的互转。 - 日志模块:能够集成多种第三方日志框架。
- 资源加载模块:对类加载器进行封装,提供加载类文件和其它资源文件的功能。
- 数据源模块:提供数据源实现并能够集成第三方数据源模块。
- 事务管理:可以和
Spring
集成开发,对事务进行管理。 - 缓存模块:提供一级缓存和二级缓存,将部分请求拦截在缓存层。
Binding
模块:在调用SqlSession
相应方法执行数据库操作时,需要指定映射文件中的SQL
节点,MyBatis
通过Binding
模块将自定义Mapper
接口与映射文件关联,避免拼写等错误导致在运行时才发现相应异常。
# 核心处理层
- 配置解析:
MyBatis
初始化时会加载配置文件、映射文件和Mapper
接口的注解信息,解析后会以对象的形式保存到Configuration
对象中。 SQL
解析与scripting
模块:MyBatis
支持通过配置实现动态SQL
,即根据不同入参生成SQL
。SQL
执行与结果解析:Executor
负责维护缓存和事务管理,并将数据库相关操作委托给StatementHandler
,ParmeterHadler
负责完成SQL
语句的实参绑定并通过Statement
对象执行SQL
,通过ResultSet
返回结果,交由ResultSetHandler
处理。
- 插件:支持开发者通过插件接口对
MyBatis
进行扩展。
# 接口层
SqlSession
接口定义了暴露给应用程序调用的 API
,接口层在收到请求时会调用核心处理层的相应模块完成具体的数据库操作。
# 参考书籍
徐郡明.MyBatis技术内幕[M].电子工业出版社,2017.