Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码

作者源码阅读笔记主要采用金山云文档记录的,所有的交互图和代码阅读笔记都是记录在云文档里面,本平台的文档编辑实在不方便,会导致我梳理的交互图和文档失去原来的格式,所以整理在文档里面,供大家阅读交流.

【金山文档 | WPS云文档】 SqlSession 会话源码和Executor SQL操作执行器源码

SqlSession 是框架与数据库交互的核心接口。

核心功能

  1. SQL 操作执行

‌提供 insert()update()delete()select() 等方法直接执行 SQL 语句,支持参数绑定与结果映射‌

  1. 事务管理

‌通过 commit()rollback() 控制事务提交与回滚,需手动调用(非自动提交模式)‌

  1. Mapper 接口代理

通过 getMapper(Class<T> type) 动态生成 Mapper 接口实现类,实现面向对象式数据库操作‌

  1. 缓存管理

‌默认启用一级缓存(会话级),缓存相同 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 子类)

类型

‌特点‌

‌适用场景‌

SimpleExecutor

默认执行器,每次执行创建新 Statement,执行后立即关闭

常规单条 SQL 操作

ReuseExecutor

复用 Statement 对象,缓存相同 SQL 的 Statement 以减少重复编译开销

高频重复 SQL

BatchExecutor

批量执行 SQL,通过 addBatch() 缓存操作,调用 flushStatements() 统一提交

批量插入/更新

增强实现类 CachingExecutor

  • 二级缓存代理‌:装饰器模式,在基础执行器外层添加二级缓存逻辑‌
  • 工作流程‌:
  1. 优先查询二级缓存(MappedStatement 级别);
  2. 缓存未命中时委托底层执行器(如 SimpleExecutor)查询数据库

‌协作组件

Executor 通过组合模式调用其他三大组件:

‌组件‌

‌职责‌

‌依赖关系‌

StatementHandler

处理 Statement 创建与参数绑定

Executor 调用其执行 SQL

ParameterHandler

转换参数类型并填充到 PreparedStatement

StatementHandler 调用

ResultSetHandler

封装结果集到 Java 对象

StatementHandler 调用

相关重要类介绍说明

SqlSessionManager 类

名称

描述

默认值

sqlSessionFactory

核心作用

  • 作为底层工厂实例,用于创建原生 SqlSession 对象(通过 openSe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记忆不曾留

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值