大数据量分批插入until
自定义分批插入
1 工具类
/**
* 拆分集合
*
* @param list list
* @param len 拆分长度
* @return list
*/
public static <T> List<List<T>> splitList(List<T> list, int len) {
if (list == null || list.size() == 0 || len < 1) {
return null;
}
List<List<T>> result = new ArrayList<>();
int size = list.size();
int count = (size + len - 1) / len;
for (int i = 0; i < count; i++) {
// 开始位置
int fromIndex = i * len;
// 结束位置
int toIndex = Math.min((i + 1) * len, size);
result.add(list.subList(fromIndex, toIndex));
}
return result;
}
2使用方式
List<AdsCityExamLevel> lisRate = new ArrayList<>();
...............
// 插入区县数据
List<List<AdsCityExamLevel>> splitList = ListUtil.splitList(lisRate, 5000);
//使用并行流分批插入
splitList.parallelStream().forEach(
x -> adsDistrictExamLevelMapper.insertRateCity(x)
);
工具类数据分批
public static void main(String[] args) {
List<LlcBkDTO> list = new ArrayList<>();
LlcBkDTO lcBkDTO = new LlcBkDTO();
lcBkDTO.setBkName("1")
.setBkTag("1")
.setIsShow("1");
LlcBkDTO lcBkDTO1 = new LlcBkDTO();
lcBkDTO1.setBkName("2")
.setBkTag("2")
.setIsShow("2");
LlcBkDTO lcBkDTO2 = new LlcBkDTO();
lcBkDTO2.setBkName("3")
.setBkTag("3")
.setIsShow("3");
LlcBkDTO lcBkDTO3 = new LlcBkDTO();
lcBkDTO3.setBkName("4")
.setBkTag("4")
.setIsShow("4");
list.add(lcBkDTO);
list.add(lcBkDTO1);
list.add(lcBkDTO2);
list.add(lcBkDTO3);
List<List<LlcBkDTO>> batchList = Lists.partition(list, 2);
System.out.println(batchList);
}
结果: