mybatis-plus批量插入性能提升

最近在引入mybatis-plus后发现其批量插入的性能不高,所以与mybatis的<foreach/>标签生成的sql插入性能做了对比

测试环境:

  1. 6核12线程,16g内存
  2. 本地数据库,没有网络传输
  3. 数据库字段7个,没有超过32位的长字符串
  4. 超过1000数据量的,按1000分批插入
  5. 开启事务

首先给出结论:

  1. 小数据量时(小于1000),性能相差不大。
  2. 数据库url未加rewriteBatchedStatements=true时,mybatis性能高于mybatis-plus,大于5000数据量时,差不多是4倍的差距
  3. 数据库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

posted @   浪迹天涯的派大星  阅读(1745)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示