MyBatis 中有三种主要的 Executor 执行器,它们分别是:
-
SimpleExecutor: 简单执行器。每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象。
-
ReuseExecutor: 可重用执行器。执行 update 或 select,以 SQL 作为 key 查找 Statement 对象,存在则使用,不存在则创建。用完后不关闭 Statement 对象,而是放置于 Map 内等待下一次使用。简言之,重复使用 Statement 对象。
-
BatchExecutor: 批处理执行器。执行 update(insert、update、delete)操作时,将所有 SQL 都添加到批处理中(addBatch()),等待统一执行(executeBatch())。在执行过程中,将所有 SQL 与预编译参数(PreparedStatement)等存放在一个集合中,统一执行。相对于简单执行器和可重用执行器,批处理执行器的效率更高。
这三种 Executor 执行器的主要区别在于对 Statement 对象的处理方式:
-
SimpleExecutor: 每次执行都会创建一个新的 Statement 对象,用完即关闭,适用于对数据库连接占用不大的场景,但性能较低。
-
ReuseExecutor: 将 Statement 对象缓存起来,下次执行相同的 SQL 时可以重复使用,减少了创建和关闭 Statement 对象的开销,适用于频繁执行相同 SQL 的场景,提高了性能。
-
BatchExecutor: 将多个 SQL 语句放入批处理中一次性执行,减少了与数据库的交互次数,适用于批量操作数据的场景,能够显著提高性能。