【Mytais系列】核心工作流程
MyBatis 的核心工作流程可以分为 配置加载、SQL 执行 和 结果映射 三个阶段,以下是详细流程说明(配合时序图理解):
一、核心工作流程时序图
二、核心流程分步说明
1. 配置加载阶段
- 输入:
mybatis-config.xml
(全局配置) +Mapper.xml
(SQL映射文件) - 关键动作:
-
- SqlSessionFactoryBuilder:解析 XML 配置,构建 Configuration 对象(包含数据源、事务、Mapper 注册等信息)
- SqlSessionFactory:基于 Configuration 创建工厂,生命周期为应用级(单例)
2. SQL 执行阶段
步骤 | 角色 | 核心职责 |
① | SqlSession | 提供 CRUD API,通过 |
② | MapperProxy | 拦截接口方法调用,将方法名映射为 SQL 语句的唯一ID(namespace.id) |
③ | Executor | 调度执行器(默认 |
④ | StatementHandler | 创建 |
⑤ | ParameterHandler | 将 Java 对象转换为 JDBC 参数(使用 TypeHandler) |
3. 结果处理阶段
步骤 | 角色 | 核心职责 |
① | ResultSetHandler | 将 ResultSet 转换为 Java 对象(通过 ResultMap 和 TypeHandler) |
② | Executor | 处理二级缓存(若开启),返回结果给调用方 |
③ | SqlSession | 提交/回滚事务(非自动提交时),关闭资源 |
三、关键机制详解
1. 动态代理机制
- MapperProxy:通过 JDK 动态代理将接口方法调用转换为
SqlSession
的 CRUD 操作 - 映射绑定:通过
namespace + methodName
关联到 Mapper.xml 中的 SQL 定义
2. 插件拦截链
// 插件通过拦截器链增强核心组件
Executor → StatementHandler → ParameterHandler → ResultSetHandler
3. 缓存机制
缓存级别 | 作用范围 | 生命周期 | 开启方式 |
一级缓存 | SqlSession 内 | 会话级(默认开启) | 自动管理 |
二级缓存 | Mapper 级别 | 应用级 | 需在 Mapper.xml 中配置 |
四、流程特点总结
- 解耦设计:将 SQL 与 Java 代码分离,通过 XML/注解配置实现松耦合
- 动态代理:通过接口绑定实现无实现类的 DAO 操作
- 可扩展性:插件机制可拦截四大核心组件(Executor/StatementHandler等)
- 灵活映射:通过 ResultMap 实现复杂结果集到对象的映射
- 资源管理:自动管理 JDBC 连接/事务的获取与释放
通过这个流程设计,MyBatis 在保持灵活性的同时,提供了比原生 JDBC 更高效、更易维护的数据库操作方案。