part4-mybatis-full-chain-summary
约 783 字大约 3 分钟
2026-05-24
系列文章:《深入Spring事务与数据源:从注解到数据库连接的全链路解析》
系列三第4篇:MyBatis执行器全链路总结与完整执行流程
基于版本:MyBatis 3.5.x、MyBatis-Spring 2.1.x、Spring Framework 5.3.x
前置阅读:系列三第3篇:SimpleExecutor与SQL执行
前言
经过前3篇文章的深度剖析,咱们把MyBatis的核心机制都搞清楚了:
- SqlSessionFactory的创建
- SqlSession与Executor的初始化
- SimpleExecutor执行SQL的完整流程
今天这篇文章,咱们来做一个完整的总结,把整个执行链路串起来,让你对MyBatis有一个全局的认识。
一、MyBatis完整执行链路
从Mapper接口调用到SQL执行,整个流程是这样的:
业务代码:userMapper.selectById(1)
↓
第1步:MapperProxy.invoke()(JDK动态代理)
↓
第2步:MapperMethod.execute()(解析方法类型)
↓
第3步:SqlSession.selectOne()(委托给Executor)
↓
第4步:BaseExecutor.query()(一级缓存检查)
↓
第5步:SimpleExecutor.doQuery()(创建StatementHandler)
↓
第6步:PreparedStatementHandler.prepare()(创建PreparedStatement)
↓
第7步:DefaultParameterHandler.setParameters()(设置参数)
↓
第8步:ps.execute()(执行SQL)
↓
第9步:DefaultResultSetHandler.handleResultSets()(处理结果集)
↓
第10步:返回User对象二、核心组件总结
2.1 SqlSessionFactory
- 作用:创建SqlSession的工厂
- 创建时机:Spring Boot启动时
- 核心配置:Configuration对象
2.2 SqlSession
- 作用:代表一次数据库会话
- 生命周期:每次请求创建一个
- 核心方法:selectOne、selectList、insert、update、delete
2.3 Executor
- 作用:真正的SQL执行引擎
- 三种实现:
- SimpleExecutor:简单执行器(默认)
- ReuseExecutor:复用Statement
- BatchExecutor:批量执行
- 一级缓存:BaseExecutor内置
2.4 StatementHandler
- 作用:处理Statement
- 四种实现:
- SimpleStatementHandler
- PreparedStatementHandler(最常用)
- CallableStatementHandler
- RoutingStatementHandler
2.5 ParameterHandler
- 作用:设置SQL参数
- 实现:DefaultParameterHandler
- 核心方法:setParameters()
2.6 ResultSetHandler
- 作用:处理结果集
- 实现:DefaultResultSetHandler
- 核心方法:handleResultSets()
三、与Spring事务的整合
MyBatis通过SpringManagedTransaction与Spring事务整合:
public class SpringManagedTransaction implements Transaction {
@Override
public Connection getConnection() {
// 从Spring事务管理器获取连接
return DataSourceUtils.getConnection(dataSource);
}
@Override
public void commit() {
// 如果连接不是事务性的,才提交
if (!isConnectionTransactional) {
connection.commit();
}
}
}关键点:共享同一个Connection!
四、系列三总结
通过这4篇文章,咱们完整追踪了MyBatis的全链路:
第1篇:MyBatis自动装配与SqlSessionFactory创建
- MybatisAutoConfiguration
- SqlSessionFactoryBean
- Mapper XML解析
- MappedStatement创建
第2篇:SqlSession与Executor执行器的创建
- SqlSession接口
- DefaultSqlSession
- Executor接口
- BaseExecutor模板方法
- SpringManagedTransaction
第3篇:SimpleExecutor与SQL执行
- SimpleExecutor.doQuery()
- StatementHandler
- ParameterHandler
- ResultSetHandler
第4篇:全链路总结(本篇)
- 完整执行流程
- 核心组件总结
- 与Spring事务整合
五、系列四预告:整合与调优
系列三到这里就结束了!但是,咱们的旅程还没有完。
最后一个系列《整合与调优全链路源码解析》将会:
- 从更高的角度串联MyBatis、事务、数据源的协作
- 分析常见异常及其根因
- 提供性能调优的最佳实践
- 总结全链路的知识点
敬请期待系列四!
参考资料
- MyBatis 3.5.x 源码
- MyBatis-Spring 2.1.x 源码
- 《MyBatis技术内幕》