Mybatis三大执行器
目录
1、执行器介绍
执行器的选择入口
设置执行器两种方式
全局配置(不建议)
局部设置(建议)
2、三个执行器区别
SimpleExecutor
ReuseExecutor
BatchExecutor
总结
3、效率测试
4、平时开发使用
一、执行器介绍

Mybatis中执行器关系如上图所示,真正生效并在最后执行中有着不同效果的只有三个执行器:
SimpleExecutor: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作
ReuseExecutor: 重用执行器会重用预处理语句(prepared statements)
BatchExecutor: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作
1、执行器的选择入口
执行器的选择就在获取SqlSession的时候

内部会调用DefaultSqlSessionFactory.openSessionFromDataSource:
可以会根据ExecutorType来选择获取某种类型执行器,我们平时不会传参,所以默认就是SimpleExecutor

ExecutorType有三种类型,正好与三种执行器对应

2、设置执行器两种方式
a、全局配置(不建议)
在XML配置文件中全局设置

b、局部设置(建议)
就是在获取SqlSession的时候传参,指定该SqlSession采用某种执行器执行

二、三个执行器区别
1、SimpleExecutor(默认执行器)
特点:
每次执行 SQL 都会创建一个新的 Statement 对象,执行完毕后立即关闭。
简单直接,但频繁创建和销毁 Statement 可能影响性能。
SimpleExecutor: 多次预编译、多次传参处理、多次执行
适用场景:
常规单条 SQL 执行。
不需要复用 Statement 或批量操作的场景。
代码示例:


2、ReuseExecutor(可重用执行器)
特点:
缓存同一个 SQL 对应的 Statement 对象,避免重复创建。
以 SQL 语句为 Key 缓存 Statement,同一会话(SqlSession)内相同 SQL 可复用。statementMap.put(sql, stmt);
性能优于 SimpleExecutor(减少创建 Statement 的开销)
ReuseExecutor: 一次预编译、多次传参处理、多次执行
注意事项:
在事务提交或回滚时,会自动关闭缓存的 Statement。
不适用于多线程环境(SqlSession 非线程安全)
适用场景:
- 同一会话中多次执行相同 SQL
代码示例:


3、BatchExecutor(批量执行器)
特点:
将多个 UPDATE/INSERT/DELETE 操作批量提交,减少数据库交互次数。
通过 addBatch() 缓存操作,调用 flushStatements() 时一次性提交。
对 SELECT 无效,SELECT 会立即执行。
BatchExecutor: 一次预编译、多次传参处、一次执行
注意事项:
需手动调用 flushStatements() 或通过事务提交触发批量执行。
需结合事务管理,避免部分失败导致数据不一致。
适用场景:
- 批量插入、更新或删除操作(如导入数据)
代码示例:


Mybatis三大执行器的更多相关文章
- SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)
本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...
- JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合
搭建 SpringMVC&Spring&MyBatis三大整合 传送门 1.准备 测试搭建S pringMVC&Spring&MyBatis三大整合 用例 a)准备 ...
- MyBatis中执行器Executor框架
与JDK提供的Executor框架类似,MyBatis也提供了一套Executor框架,具体如下图: 其为Mybatis提供与数据库交互的功能,是一个典型的装饰器模式的应用--对JDBC功能的封装,同 ...
- JAVA 框架 / SSM / SSM SPRING+SPING MVC + MYBATIS 三大框架整合详细步骤
http://how2j.cn/k/ssm/ssm-tutorial/1137.html
- SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...
- Mybatis执行器源码手记
今天将Mybatis的执行器部分做一下简单手记. 一.java原生JDBC 众所周知,Mybatis是一个半自动化ORM框架.其实说白了,就是将java的rt.jar的JDBC操作进行了适度的封装.所 ...
- MyBatis执行器
Mybatis的执行器 下面先展示一张图,用来说明一下Mybatis执行器的整体架构 SimpleExecutor 首先SimpleExecutor是我们最常使用的一个执行器,无论我们执行什么方法默认 ...
- 使用Redis做MyBatis的二级缓存
使用Redis做MyBatis的二级缓存 通常为了减轻数据库的压力,我们会引入缓存.在Dao查询数据库之前,先去缓存中找是否有要找的数据,如果有则用缓存中的数据即可,就不用查询数据库了. 如果没有才去 ...
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...
- 深入浅出mybatis之缓存机制
目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...
随机推荐
- PICO 避坑指南
1. Win10 不需要串口驱动,使用PICO W之前先刷固件pico w的固件 micropython-firmware-pico-w-290622.rar 刚开始 刷的固件不对,一直无法识别串口. ...
- HTTP劫持
HTTP劫持 想了解什么是HTTPS,要先知道什么是HTTP HTTP HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件,图片文件,查询结果等,一般基于B/S架构, ...
- Collection的子接口之一:List 接口
List 接口概述: 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组 List集合类中 元素有序.且可重复,集合中的每个元素都有其对应的顺序索引. List容器中的元素都对 ...
- DeepSeekV3+Roo Code,智能编码好助手
前言 硅基流动最近上线了deepseek-ai/DeepSeek-R1与deepseek-ai/DeepSeek-V3,感兴趣快来试试吧! 邀请注册得14元不过期额度:https://cloud.si ...
- 从购物找零到两数之和:一道经典算法题的深度解析|LeetCode 1 两数之和
LeetCode 1 两数之和(Two Sum) 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 还记得上次去超市购物吗?你拿着一张100元钞票 ...
- Ceph的crush算法与一致性hash对比介绍
本文分享自天翼云开发者社区<Ceph的crush算法与一致性hash对比介绍>,作者:l****n 首先,我们先回顾下一致性hash以及其在经典存储系统中的应用. 一致性hash的基本原理 ...
- SQL注入之联合查询注入
SQL注入之联合查询注入 一.联合查询注入原理 联合查询注入是一种常见的SQL注入攻击手法,其核心原理是利用SQL中的UNION操作符将多个SELECT语句的结果集合并,从而返回一个统一的结果集.在使 ...
- [业界方案] Yarn的业界解决方案和未来方向
[业界方案] Yarn的业界解决方案和未来方向 目录 [业界方案] Yarn的业界解决方案和未来方向 0x00 摘要 0x01 Yarn 1.1 参考文章 0x02 分析 2.1 综述 2.1.1 y ...
- 『Python底层原理』--CPython如何运行Python代码
Python作为一种广泛使用的编程语言,其简洁的语法和强大的功能深受开发者喜爱. 然而,对于许多Python用户来说,CPython(Python的官方实现)的内部工作机制仍然是一个神秘的黑盒. 今天 ...
- 『Python底层原理』--Python整数为什么可以无限大
整数类型是编程中最常见的数据类型之一,但它的实现细节却鲜为人知. 与其他语言不同,Python 的整数是任意精度的,这意味着它们可以无限大,仅受限于内存. 这种特性使得 Python 在处理大整数时非 ...