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

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

前言

基于mybatis实现的批量插入和更新
由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决

实现

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

	/*** 封装使用批量添加或修改数据库操作* * @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

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

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

更新的写法

    <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>

批量数据

	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);

调用

	// 执行批量插入或修改Consumer<List<UserBean>> consumer = v -> dao.insertBatchUser(v);insertBatch(list, consumer, true)
http://www.lryc.cn/news/138814.html

相关文章:

  • vue登录验证码组件,前端验证
  • SLS日志解析配置
  • CRM系统有哪些功能可以管理客户?
  • 15.树与二叉树基础
  • neo4j 图数据库 springboot
  • Linux下的系统编程——makefile入门(四)
  • Mybatis的综合案例-学生信息查询系统 用于校验是否真正学习掌握了动态SQL
  • 力扣:70. 爬楼梯(Python3)
  • 陕西广电 HG6341C FiberHome烽火 光猫获取超级密码 改桥接模式 提升网速
  • 无涯教程-PHP - 移除的扩展
  • 笔记:transformer系列
  • Mysql socket连接测试
  • 探究分布式操作系统的本质
  • opencv-dnn
  • 如何选择合适的开源许可证?
  • 【前端】深入解析CSS:选择器、显示模式、背景属性和特征剖析
  • 算法训练营第三十四天(8.23)| 动态规划Part04:01背包
  • 【python】tkinter使用多进程打包成exe后multiprocessing无法关闭对应进程
  • Redis工具类(缓存操作,Object转换成JSON数据)
  • Linux 下 Java Socket 编程报 java.net.Exception:Permission denied (权限不足)
  • IDEA项目实践——VUE介绍与案例分析
  • vue-canvas基本使用和注意事项-动画闪烁效果-自适应适配不同分辨率问题
  • Jmeter 如何才能做好接口测试?
  • 电商平台京东平台获得京东商品描述API接口演示案例
  • 《算法竞赛·快冲300题》每日一题:“单位转换”
  • R语言13-R语言中的数据导入导出和批量导入
  • 【Java】对象与类
  • 视频尺寸缩小,一键批量剪辑,轻松制作精简版
  • leetcode做题笔记94. 二叉树的中序遍历
  • UWB高精度人员定位系统源码,微服务+java+ spring boot+ vue+ mysql技术开发