Spring Boot集成MyBatis如何判断batch模式是否生效及配置默认批量大小
问题解答
1. 批量模式未生效排查方向
- 首先确认JDBC连接配置是否开启了批量语句支持:以MySQL为例,需要在jdbc连接串中添加
allowMultiQueries=true&rewriteBatchedStatements=true两个参数,前者允许单次请求发送多条SQL,后者会让驱动自动优化同构批量语句的提交格式,大幅提升批量执行性能。默认JDBC驱动会禁止单次请求发送多条SQL,就算MyBatis用了BATCH执行器也会被驱动拆成逐条发送,这是最常见的配置遗漏。 - 不要仅依赖MyBatis的业务日志判断执行逻辑:MyBatis的默认日志会打印所有生成的SQL及参数,哪怕是批量模式也会输出每条语句的日志,不代表是逐条发送到数据库的。验证实际执行情况可以开启数据库的通用日志(如MySQL的general_log),查看实际收到的请求是单次多条还是多次单条。
- 你当前的SqlSession配置、从batchSqlSession获取Mapper的逻辑都是正确的,@Transactional注解不会影响BATCH执行器的生效,只要Mapper是从BATCH类型的SqlSession中获取的,执行逻辑就会走BatchExecutor。
2. 默认批量大小配置说明
MyBatis官方没有提供全局默认batch-size的配置项,不管是application.properties配置还是初始化SqlSessionTemplate时都没有对应的内置参数,批量提交的触发时机默认需要业务代码自行控制。
如果需要全局统一批量大小,可以自行扩展实现:
- 在
application.properties中自定义配置项,比如custom.mybatis.batch-size=100 - 封装批量操作工具类,注入该配置项作为默认批量大小,统一处理批量循环、flush触发逻辑即可。
内容的提问来源于stack exchange,提问作者user1778855
相关产品推荐
相关产品推荐

