Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

前言

基于mybatis实现的批量插入和更新

由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决

实现

原理还是分配执行,这里的100就是设定每次执行最大数

java 复制代码
	/**
	 * 封装使用批量添加或修改数据库操作
	 * 
	 * @param list 集合
	 * @param insertFunc 需要执行的任务 (Consumer lambda表达式方法引用的任务目标)
	 * @param <T> 自定义类型
	 */
	public static <T> void insertBatch(List<T> list, Consumer<List<T>> consumer, boolean asyn) {
		int max = 100; // 每次批量限制数
		if (list.size() > max) {
			List<List<T>> allList = new ArrayList<>();
			List<T> tempList = new ArrayList<>();
			for (int i = 0; i < list.size(); i++) {
				tempList.add(list.get(i));
				if ((i % max) == 0) {
					allList.add(tempList);
					tempList = new ArrayList<>();
				}
			}
			if (tempList.size() > 0) {
				allList.add(tempList);
			}
			if(asyn) {
				// 多线程遍历(异步)-这里直接遍历无需accept(接口式方法简化)
				allList.parallelStream().forEach(consumer);
			}else {
				// 多线程遍历(同步)-这里直接遍历无需accept(接口式方法简化)
				allList.forEach(consumer);
			}
		} else {
			// 执行泛型集合数据
			consumer.accept(list);
		}
	}

使用

xml

这里使用插入作为例子,也可以使用批量更新

xml 复制代码
	<insert id="insertBatchUser">
        insert into sys_user(
        	name,
        	sex
        )values 
        <foreach collection="list" item="item" index="index" separator=",">
	        (#{item.name}, #{item.sex})
	    </foreach>
    </insert>

更新的写法

xml 复制代码
    <update id="updateBatchUser">
        <foreach collection="list" item="item" index="index" separator=";">
            update sys_user
            <set>
                <if test="item.name != null and item.name != ''">
                    name = #{item.name},
                </if>
                update_date = #{item.updateDate}
                <where>
                    id = #{item.id}
                </where>
            </set>
        </foreach>
    </update>

批量数据

java 复制代码
	List<UserBean> list = new ArrayList<>();
	UserBean user1 = new UserBean();
	user1.setName("张三");
	user1.setSex("男");
	UserBean user2 = new UserBean();
	user2.setName("李四");
	user2.setSex("男");
	list.add(user1);
	list.add(user2);

调用

java 复制代码
	// 执行批量插入或修改
	Consumer<List<UserBean>> consumer = v -> dao.insertBatchUser(v);
	insertBatch(list, consumer, true)
相关推荐
程序员-珍4 分钟前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
liuxin3344556621 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
2401_8572979130 分钟前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
福大大架构师每日一题41 分钟前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
金灰1 小时前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
菜鸟一皓1 小时前
IDEA的lombok插件不生效了?!!
java·ide·intellij-idea
爱上语文1 小时前
Java LeetCode每日一题
java·开发语言·leetcode
bug菌1 小时前
Java GUI编程进阶:多线程与并发处理的实战指南
java·后端·java ee
程序猿小D1 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
极客先躯2 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略