Mybatis-plus的savebatch伪批量剖析
2022-06-03 17:17 话猫 阅读(11656) 评论(1) 编辑 收藏 举报一、源码
今天工作听同事说mybatis-plus的saveBatch方法是伪批量,底层实现是一个一个插入。用了这么久的saveBatch方法,竟然.....
不追根溯源不是我小糖的风格哇,赶紧扒一波源码分析一哈
mybatis-plus的saveBatch方法是ServiceImpl类实现的,源码如下:
定睛一看果然有一个for循环在处理传递的集合实体,依次插入数据库 batchSqlSession.insert(sqlStatement, anEntityList)
二、执行流程
看完了源码准备实验一波,看下执行的sql的日志
1 2 | //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
好了,到这里分析完毕!!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2019-06-03 springboot-devtools实现项目的自动重启