Mybatis批量更新时的一些问题
本人在实际开发中,碰到了一些关于批量处理数据的问题,在此记录一下。
1、当数据库是SqlServer时,批量插入或者批量更新的时候切记mybatis中#{}更新的数量不能超过2100个。
2、当数据库是Mysql时,mybatis语句不能超过1MB。否则都会报错!
3、List的元素数量最好不能超过1000个。
可以使用切割List的方式进行处理。 如下代码:
/**
* 切割List返回对应List集合(批量更新)
*
* @param <T> 泛型
* @param list 原集合
* @param num 切割间距
* @return 返回结果
*/
private <T> List<List<T>> splitListEachNum(List<T> list, int num) {
List<List<T>> result = new LinkedList<>();
int length = list.size();
int cycle = length / num;
int left = length % num;
for (int i = 0; i < cycle; i++) {
List<T> data = list.subList(num * i, num * (i + 1));
result.add(data);
}
if (left > 0) {
List<T> data = list.subList(num * cycle, num * cycle + left);
result.add(data);
}
return result;
}