第一种就是自己分批写入:建立新list大小为500,然后循环你的数据

List<UserVO> list=mapper.getList(); //从数据库查询出来的list,也就是需要进行批量插入的总list
//一次插入的条数,也就是分批的list大小
int maxCount= 500;
int listSize=list.size();
int maxSize=listSize - 1;
List<UserVO> newList = new ArrayList<UserVO>();//新建一个载体list
for (int i = 0; i < listSize; i++) {
    //分批次处理
    newList.add(list.get(i));//循环将数据填入载体list
    if (maxCount== newList.size() || i == maxSize) {  //载体list达到要求,进行批量操作
        //调用批量插入
        mapper.insertList(newList);
        newList.clear();//每次批量操作后,清空载体list,等待下次的数据填入
    }
}

 第二种导入apache的包,使用他的 Lists.partition()

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>
List<Integer> list=new ArrayList<>();
for (int i=0;i<500;i++){
    list.add(i);
}
List<List<Integer>> newList = Lists.partition(list, 150);
for (List<Integer> list1:newList){
    System.out.println(list1.size());
}

第三种使用guava的包

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

List<Integer> list=new ArrayList<>();
for (int i=0;i<500;i++){
    list.add(i);
}
List<List<Integer>> newList = Lists.partition(list, 150);
for (List<Integer> list1:newList){
    System.out.println(list1.size());
}

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐