Mybatis-plus的savebatch伪批量剖析
2022-06-03 17:17 话猫 阅读(11248) 评论(1) 编辑 收藏 举报一、源码
今天工作听同事说mybatis-plus的saveBatch方法是伪批量,底层实现是一个一个插入。用了这么久的saveBatch方法,竟然.....
不追根溯源不是我小糖的风格哇,赶紧扒一波源码分析一哈
mybatis-plus的saveBatch方法是ServiceImpl类实现的,源码如下:
定睛一看果然有一个for循环在处理传递的集合实体,依次插入数据库 batchSqlSession.insert(sqlStatement, anEntityList)
二、执行流程
看完了源码准备实验一波,看下执行的sql的日志
//lists中有2005 this.saveBatch(lists);
mybtis-plus的日志
mysql的日志
自动提交改为0
然后多行insert语句
最后提交事务
由mysql的日志,可以得出结论,确实是一条一条插入数据库的,那这样插入效率可真是令人担忧。
三、优化
网上大部分都有说对于saveBatch的慢插入效率还是可以提升的,在数据库连接上做以下配置:
url: jdbc:mysql://127.0.0.1:3306/photo?rewriteBatchedStatements=true
在加完rewriteBatchedStatements=true参数之后,看下saveBatch的sql执行日志
mybatis-plus的日志还是跟上面一样
mysql的日志:
它是先将自动提交改为0
然后将1000条数据组成一批(一个insert语句)来执行
最后提交事务,autocommit改为1
好了,到这里分析完毕!!!!