import com.google.common.collect.Lists;import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;/*** @Description mybatis分批插入数据使用* @Author WangKun* @Date 2024/9/19 11:20* @Version*/
public class MyBatisSqlUtils {/*** @param data 全量数据(全部数据)* @param batchSize 批次插入大小(每次插入数据多少)* @param consumer 插入处理(插入值)* @Description 分批次批量插入* @Throws* @Return void* @Date 2024-09-19 11:22:05* @Author WangKun**/public static <E> void batch(List<E> data, int batchSize, Consumer<List<E>> consumer) {if (data == null || data.isEmpty()) {return;}List<E> list = Lists.newArrayList();int size = data.size();int mathMin = Math.min(batchSize, size);int i = 1;for (Iterator<E> item = data.iterator(); item.hasNext(); ++i) {list.add(item.next());if (i == mathMin) {consumer.accept(list);list.clear();mathMin = Math.min(mathMin + batchSize, size);}}}}
使用:以新增为例,每次插入100条
MyBatisSqlUtils.batch(list, 100, xxx-> {xxxService.insert (xxx);});//lambda写法调用
MyBatisSqlUtils.batch(list, 100, xxxService::insert);
xml中使用<foreach> 既可以了
例子