当前位置: 首页 > news >正文

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
http://www.dtcms.com/a/331972.html

相关文章:

  • 明远智睿SSD2351:以技术突破重构嵌入式市场格局
  • AI重构职场:岗位消亡与组织重塑
  • 【MATLAB技巧】已知平面上的一些点,拟合得到一个圆的例程,给出最小二乘与非线性迭代两种解法,附下载链接
  • ROS机器人云实践设计十年-2025-2015-
  • 速通 OpenPI 本地部署(远端推理)简易实现 —— WSL2 + Ubuntu 24.04 环境完整指南
  • 会议系统完整流程简版解析:创建会议、加入会议与消息转发
  • 【框架】跨平台开发框架自用整理
  • HTB Busqueda writeup
  • 经典蓝牙(BR/EDR)配对连接全过程:从 HCI 命令到 Profile 交互
  • C++编程学习(第23天)
  • Mybatis 源码解读-Plugin插件源码
  • 数据结构---关于复杂度的基础解析与梳理
  • 2025年缩水甘油苯基醚市场深度全景调研:投资前景分析及趋势预测
  • 机器学习——TF-IDF算法
  • 捉迷藏(BFS)
  • NY219NY220美光固态闪存NY224NY229
  • 数据结构---链式结构二叉树
  • PostgreSQL——触发器
  • 【慕伏白】CTFHub 技能树学习笔记 -- 基础知识 签到
  • leetcode-python-344反转字符串
  • Wireshark 与 Fiddler 的对比与适用场景
  • 宋红康 JVM 笔记 Day01|JVM介绍
  • Flink on YARN启动全流程深度解析
  • AI生成视频大纲(AI生成视频摘要功能)
  • python中的map函数
  • 记录LiveData使用及原理
  • Unity宝箱随机事件实现指南
  • AI三国杀:马斯克炮轰苹果“偏袒”OpenAI,Grok与ChatGPT的应用商店战争揭秘
  • 【昇腾】VirtualBox虚拟机下搭建Ubuntu 22.04环境给TF卡制卡报读写IO错误的问题处理_20250814
  • 【CF】Day127——杂题 (数论 gcd | 数论 gcd | 博弈论 | 二分图判断 | 贪心 + 暴力 / 二分答案 | 数论 gcd + 动态规划)