class ListUtil{
public static List<List<?>> splitList(List<?> list, int limit) {
List<List<?>> lists = new ArrayList<>();
if (list == null || list.size() == 0) {
return lists;
}
int total = list.size();
int remain = total % limit; // 确认是否有余数
int times = total / limit; // 要分裂的次数
int count = remain == 0 ? times : times + 1; // 如果有余数,则多分裂一次
for (int i = 0; i < count; i++) {
List<?> appList = list.stream().skip((long)i * limit).limit(limit).collect(Collectors.toList());
lists.add(appList);
}
return lists;
}
}
调用:
List<BatchList> list = (数据量较大,比如10w条数据) ;
如果一下子全量插入数据库,会占用太多数据库资源,影响其它业务进行,所以分批次操作。
List<List<BatchList>> lists = ListUtil. splitList(list,5000); // 一次插入5000条
for(List<BatchList> list : lists ){
xxxDAO.insert(list); // 数据持久层 保存入库
}