当前位置: 首页 > article >正文

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

例子


http://www.kler.cn/news/312238.html

相关文章:

  • ROS激光雷达介绍
  • WPF中图片的宫格显示
  • TPDO触发条件如何满足?
  • AI学习指南深度学习篇-Adam的Python实践
  • 如何配置和使用自己的私有 Docker Registry
  • python的6种常用数据结构
  • 3.大语言模型LLM的公开资源(API、语料库、算法库)
  • Python中的树与图:构建复杂数据结构的艺术
  • 图论三元环(并查集的高级应用)
  • 天润融通创新功能,将无效会话转化为企业新商机
  • 青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
  • Python 集合的魔法:解锁高效数据处理的秘密
  • 工厂模式(一):简单工厂模式
  • Web后端服务平台解析漏洞与修复、文件包含漏洞详解
  • 【Git原理与使用】多人协作与开发模型(2)
  • 杀死端口占用的进程
  • 常用函数式接口的使用
  • 3D GS 测试自己的数据
  • react 甘特图之旅
  • C语言 | Leetcode C语言题解之第405题数字转换为十六进制数
  • SpringBoot 数据库表结构文档生成
  • 深入Redis:核心的缓存
  • 【计算机网络 - 基础问题】每日 3 题(十四)
  • 百易云资产系统 house.save.php SQL注入
  • tomcat知识
  • 【Android】ViewPager
  • 生信初学者教程(三):介绍
  • [Linux] 进程优先级 进程的调度与切换 环境变量详解
  • qt--Qml控件库如何从外部导入
  • 虾皮选品技巧有哪些?超全Shopee选品的方法和技巧分享!