最近在做一个业务碰到使用mybatisPlus的saveBatch()方法插入500条记录竟然需要20s,后续查看原因发现如下:
mybatisplus 框架的 批量操作方法(saveBatch/saveOrUpdateBatch/updateBatchById等)在执行的时候默认并没有批量添加,实际上在插入的时候仍然是一条条记录的插,使用的是批量执行器进行批量提交,但在sql层面还是执行的多条sql,以saveBatch方法为例,saveBatch()方法也是一条一条的插入,也就是说它会产生多条insert语句,而不是一条insert语句,所以它不是真正的批量插入,更不能提高插入效率。。最终带来的结果就是如果数据量比较大的情况下使用mybatisplus批量操作方法非常耗时,建议手写xml文件进行批量插入

WechatIMG110.jpg
那么如何让mybatisplus的批量方法开启批量插入(一条sql插入多条)?
在[jdbc]的url连接参数中添加 rewriteBatchedStatements=true
MyBatis Plus配置:需确保使用MySQL 5.1.13以上版本的驱动,并在数据源配置中启用该参数。
mybatis xml手动写批量sql的话,必须保持写法是一条sql执行多个记录才不需要加这个参数,否则若批量操作是多条sql拼接依然也需要添加这个参数