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号
浙公网安备 33010602011771号