自学内容网 自学内容网

MyBatis 分批次执行(新增,修改,删除)

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> 既可以了

例子


原文地址:https://blog.csdn.net/WangKun_0612/article/details/142391989

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!