最近在写mybati的分批插入,一直报错,一直在纠结自己的循环插入是不是有问题,但是数据量少的时候可以正常插入,但是插入数据量大的时候就会报错。
后来查询是mysql限制插入的sqlMysql 对语句的长度有限制,默认是 4M。
Mybatis 对动态语句没有数量上的限制。所以采用分批次插入数据。

// 按每10个一组分割
Integer partialLimit = 20;
List<DlfxPost> batchList = new ArrayList<>();
for (int i = 0; i < postList.size(); i++) {
    batchList.add(postList.get(i));
    // 如果分批的集合填充满了元素或者填充的是最后一个元素
    if ((Objects.nonNull(batchList) && Objects.equals(batchList.size(), partialLimit)) || Objects.equals((postList.size() - 1), i)) {
  //执行插入语句      
        dlfxPostMapper.insertDlfxPostList(batchList);
        // 执行完了处理逻辑之后,将 batchList 的元素清空
        batchList.clear();
    }
}```

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐