作者源码阅读笔记主要采用金山云文档记录的,所有的交互图和代码阅读笔记都是记录在云文档里面,本平台的文档编辑实在不方便,会导致我梳理的交互图和文档失去原来的格式,所以整理在文档里面,供大家阅读交流.
【金山文档 | WPS云文档】 SqlSession 会话源码和Executor SQL操作执行器源码
SqlSession
是框架与数据库交互的核心接口。
核心功能
- SQL 操作执行
提供 insert()
、update()
、delete()
、select()
等方法直接执行 SQL 语句,支持参数绑定与结果映射
- 事务管理
通过 commit()
和 rollback()
控制事务提交与回滚,需手动调用(非自动提交模式)
- Mapper 接口代理
通过 getMapper(Class<T> type)
动态生成 Mapper 接口实现类,实现面向对象式数据库操作
- 缓存管理
默认启用一级缓存(会话级),缓存相同 SQL 查询结果,通过 clearCache()
可手动清空。
Executor
包是 MyBatis 执行 SQL 操作的核心引擎,位于 org.apache.ibatis.executor
包下,负责协调 SQL 执行全流程(包括缓存管理、事务控制、参数处理、结果映射等)
Executor
包是 MyBatis 的 SQL 执行中枢,通过多态实现支持基础操作、缓存优化、批量处理等场景,并协调四大组件完成从 SQL 解析到结果映射的全链路操作
核心接口与实现
Executor
接口
定义 SQL 执行的标准方法:
public interface Executor {
int update(MappedStatement ms, Object parameter); // 执行更新操作
<E> List<E> query(...); // 执行查询操作
void commit(boolean required); // 提交事务
void rollback(boolean required); // 回滚事务
CacheKey createCacheKey(...); // 创建缓存键
boolean isCached(MappedStatement ms, CacheKey key); // 检查缓存
}
基础实现类(BaseExecutor
子类)
类型 |
特点 |
适用场景 |
|
默认执行器,每次执行创建新 |
常规单条 SQL 操作 |
|
复用 |
高频重复 SQL |
|
批量执行 SQL,通过 |
批量插入/更新 |
增强实现类 CachingExecutor
- 二级缓存代理:装饰器模式,在基础执行器外层添加二级缓存逻辑
- 工作流程:
- 优先查询二级缓存(
MappedStatement
级别); - 缓存未命中时委托底层执行器(如
SimpleExecutor
)查询数据库
协作组件
Executor 通过组合模式调用其他三大组件:
组件 |
职责 |
依赖关系 |
|
处理 |
Executor 调用其执行 SQL |
|
转换参数类型并填充到 |
被 |
|
封装结果集到 Java 对象 |
被 |
相关重要类介绍说明
SqlSessionManager 类
名称 |
描述 |
默认值 |
sqlSessionFactory |
核心作用
|