mybatis-plus批量插入性能提升
最近在引入mybatis-plus后发现其批量插入的性能不高,所以与mybatis的<foreach/>标签生成的sql插入性能做了对比
测试环境:
- 6核12线程,16g内存
- 本地数据库,没有网络传输
- 数据库字段7个,没有超过32位的长字符串
- 超过1000数据量的,按1000分批插入
- 开启事务
首先给出结论:
- 小数据量时(小于1000),性能相差不大。
- 数据库url未加rewriteBatchedStatements=true时,mybatis性能高于mybatis-plus,大于5000数据量时,差不多是4倍的差距
- 数据库url加rewriteBatchedStatements=true时,mybatis-plus性能高于mybatis,大于5000数据量时,差不多是1.5倍差距
所以增加配置后,mybatis-plus的批量插入性能不低,基本无代码入侵,也不会影响已有的代码,其对单表的操作很方便,可以考虑引入使用。
1、性能测试对比
测试代码如下:
@Transactional @Override public void batchInsert(Integer total, String type) { List<UserInfo> list = new ArrayList<>(total); Date date = new Date(); for (int i = 0; i < total; i++) { UserInfo userInfo = new UserInfo(); userInfo.setName("" + i); userInfo.setPhone("13266665555"); userInfo.setCreateTime(date); userInfo.setIsDelete(1); userInfo.setFirstPinyin("" + i); list.add(userInfo); } long start = System.currentTimeMillis(); if ("mybatis-plus".equals(type)) { this.saveBatch(list); } else { //分批插入,每次插入1000条 List<List<UserInfo>> listList = ListUtil.partition(list, 1000); listList.forEach(e -> userInfoMapper.insertBatch(e)); } long end = System.currentTimeMillis(); System.out.println(type + "批量插入(" + total + "条)数据所用时间: " + (end - start) / 1000.00 + "s"); }
测试结果如下:
1.1 数据库url未加rewriteBatchedStatements=true
1.1 数据库url加rewriteBatchedStatements=true
分类:
mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通