最近在写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();
}
}```