MyBatis框架提供了三种不同的 Executor 执行器实现,分别是 SimpleExecutor、 ReuseExecutor 和 BatchExecutor。它们之间的区别如下:
SimpleExecutor(简单执行器):
- 在每次执行数据库 update 或 select 操作时,都会创建一个新的 Statement 对象,并立即执行 SQL 语句。
- 每次执行都会创建和关闭 Statement 对象,没有二级缓存的使用。
- 适用于执行简单、临时性的 SQL 操作。
ReuseExecutor(可重用执行器):
- 在执行数据库 update 或 select 操作时,会重用已经存在的 Statement 对象。
- 在多次执行相同的 SQL 语句时,不需要重复创建 Statement 对象,提高了性能。
- 适用于执行相同 SQL 语句多次的场景,例如批量插入或更新。
BatchExecutor(批量执行器):
- 在执行数据库 update (没有select,JDBC批处理不支持select)操作时,会进行批量操作,减少了与数据库之间的通信次数。
- 当一次性执行大量的相同 SQL 的批量操作时,可以显著提高性能。
- 执行的 SQL 会批量提交到数据库,并在数据库中执行,可能存在一定的风险。
- 适用于大批量的数据插入、更新或删除操作。
这三种执行器在处理 SQL 语句时的性能和效果略有不同,适用于不同的使用场景。SimpleExecutor 每次都会创建新的 Statement 对象,适合用于简单的 SQL 操作。ReuseExecutor 能够重用已存在的 Statement 对象,适合用于多次执行相同 SQL 语句的场景。BatchExecutor 适合执行大批量的相同 SQL 的操作,可以显著提高性能,但需要注意批量提交可能存在一定的风险。
可以在 MyBatis 的配置文件中选择合适的执行器,根据应用程序的需求和数据库操作的特点来选择合适的执行器类型。
Mybatis中如何指定使用哪一种Executor执行器?
- 在Mybatis配置文件中,在设置(settings)可以指定默认的ExecutorType执行器类型,也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数,如SqlSession openSession(ExecutorType execType)。
- 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。