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控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...
随机推荐
- 项目PMP之七项目成本管理
项目PMP之七--项目成本管理 一.定义:在预算内管理成本:预测项目成本 核心理念:重点关注项目活动的成本:同时决策的影响.相关方的不同时间不同方法的测算 趋势:挣值进度(ES)逻辑:敏捷的方式则 ...
- 快速修改MySQL数据库名称
原理:先创建新的数据库,然后利用information_schema数据库表结构信息,用 RENAME命令 将旧的表迁移到新数据库里面,最后删除旧的数据库名称即可. 步骤如下: #查询目标数据库下面的 ...
- Centos 7 单用户模式修改密码/配置
1.启动系统,启动项界面显示时,按"↑↓"键停留在此界面,按下"e"键进入编辑模式 2.利用"↑↓"键找到"linux16&quo ...
- 正式发布!《ICPMM行业云平台运营管理能力成熟度》系列标准来了!
近日,由中国信息通信研究院(简称中国信通院)主办的企业上云用云专项行动会在北京举行.在"行业云平台研讨会暨年度成果发布会"专题会议中,中国信通院携手天翼云与业界多家头部机构发布&l ...
- Linux 服务器防火墙开放端口命令(iptables、firewalld和ufw)
本文主要介绍Linux中,Centos.Ubuntu和Debian开放防火墙端口的命令(iptables.firewalld和ufw)方法. 1.Centos中开放端口 1.systemctl sta ...
- 闲话 6.19/CF1938M
CF1938M 计数以下序列 \(\lang a\rang\) 的个数: \[\sum_{i=1}^m a_i=n\\ \forall 1<i<m,(a_i-a_{i-1})(a_i-a_ ...
- Amoro提供grafana的metrics介绍
一.指标内容 +| Metric Name | Type | Tags | Description | +|---------------------------------------------- ...
- 数字先锋 | 央企首批!天翼云助力中国石化率先完成全尺寸DeepSeek国产化部署!
自2025年春节以来,DeepSeek的全新开源推理模型在全球范围内迅速走红,成为各界关注的焦点,同时引发国产AI发展浪潮.众多国内企业相继接入DeepSeek系列模型,以提升企业智能化水平,加速业务 ...
- CAD内核的奥秘 | 工业软件发展史 (转)
CAD内核的奥秘 | 工业软件发展史 (声明:此文非本人原著,仅供交流,如果侵犯到原作者权利,立即删除) 如果一个产业要寻根,就会发现一个万千世界,最后会聚焦到一个点上. "一沙一世界&qu ...
- ABB工业机器人控制柜IRC5维修具体细节
对于ABB机器人维修工作,需要具备专业的知识和技能,同时遵循维修步骤和注意事项.通过加强预防措施和建议的实施,可以有效降低ABB工业机器人控制柜IRC5的故障率,提高ABB工业机器人的整体运行效率. ...