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 都会创建一个新的
PreparedStatement对象【预编译对象】,执行完毕后立即关闭。 -
简单直接,但频繁创建和销毁
PreparedStatement对象可能影响性能。 -
SimpleExecutor: 多次预编译、多次传参处理、多次执行
适用场景:
-
常规单条 SQL 执行。
-
不需要复用
PreparedStatement对象【预编译对象】或 批量操作的场景。
代码示例:


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


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



浙公网安备 33010602011771号