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.mzph.cn/news/50180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dnsmasq-dhcp DHCPDISCOVER “no address available“ 问题解决方法

问题现象 在Centos7.5系统中已安装dnsmasq组件并开启DHCP服务功能&#xff0c;然而客户端无法通过DHCP的方式获取IP&#xff0c;通过查看系统日志/var/log/messages发现日志中存在以下两个关键信息&#xff1a; dnsmasq-dhcp DHCPDISCOVER “no address available”DHCPNAK 1…

什么是神经网络

什么是神经网络 什么是神经网络&#xff1f;CNN、RNN、GNN&#xff0c;这么多的神经网络&#xff0c;有什么区别和联系&#xff1f; 既然我们的目标是打造人工智能&#xff0c;拥有智慧的大脑无疑是最好的模仿对象&#xff0c;人脑中有约860亿个神经元&#xff0c;这被认为是…

量化开发学习入门-概念篇

1.网格交易法 网格交易法&#xff08;Grid Trading&#xff09;是一种基于价格波动和区间震荡的交易策略。它适用于市场处于横盘或震荡的情况下。 网格交易法的基本思想是在设定的价格区间内均匀地建立多个买入和卖出水平&#xff08;网格&#xff09;&#xff0c;并在价格上…

设计模式-责任链

在现代的软件开发中&#xff0c;程序低耦合、高复用、w易拓展、易维护 什么是责任链 责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 使用场景…

ModaHub魔搭社区:WinPlan企业经营垂直大模型数据建模(二)

目录 维度模版管理 录入维度数据 经营指标 创建经营指标 经营指标管理 维度模版管理 创建维度后,可在维度库的左侧栏展示全部启用中的维度,你也可以再次编辑维度模版;如不再需要该维度,可停用,停用后可在停用管理里重新启用或删除。 1)停用:维度停用后,不会出现在…

LAMP架构

这里写目录标题 LAMP架构一.LAMP架构的组成二.CGI和fastcgi1.CGI2.fastcgi3.比较4.PHP4.2**的** **Opcode** **语言**4.3PHP 配置 三.编译安装Apache http服务1.环境准备2.安装环境依赖包3.解压软件包4.移动apr包 apr-util包到安装目录中&#xff0c;并切换到 httpd-2.4.29目录…

拓扑排序Topological sorting/DFS C++应用例题P1113 杂务

拓扑排序 拓扑排序可以对DFS的基础上做变更从而达到想要的排序效果。因此&#xff0c;我们需要xy准备&#xff0c;vis数组记录访问状态&#xff0c;每一个任务都可以在dfs的过程中完成。 在使用拓扑排序方法时一些规定&#xff1a; 通常使用一个零时栈不会直接输出排序的节点…

压缩包安装mysql

删除 MySQL sc delete mysql 安装mysql mysqld -install

EasyExcel实现多sheet文件导出

文章目录 EasyExcel引入依赖表结构学生表课程表教师表 项目结构下载模板实体类StudentVoCourseVoTeacherVo ControllerServiceEasyExcelServiceStudentServiceCourseServiceTeacherService ServiceImplEasyExcelServiceImplStudentServiceImplCourseServiceImplTeacherServiceI…

Ubuntu 配置国内源

配置国内源 因为众所周知的原因&#xff0c;国外的很多网站在国内是访问不了或者访问极慢的&#xff0c;这其中就包括了Ubuntu的官方源。 所以&#xff0c;想要流畅的使用apt安装应用&#xff0c;就需要配置国内源的镜像。 市面上Ubuntu的国内镜像源非常多&#xff0c;比较有…

cuda编程day001

一、环境&#xff1a; ①、linux cuda-11.3 opecv4.8.0 不知道头文件和库文件路径&#xff0c;用命令查找&#xff1a; # find /usr/local -name cuda.h 2>/dev/null # 查询cuda头文件路径 /usr/local/cuda-11.3/targets/x86_64-linux/include/cuda.h # find /usr/…

走进图算法:C语言实现图的表示与深度优先搜索

走进图算法&#xff1a;C语言实现图的表示与深度优先搜索 图是一种重要的数据结构&#xff0c;它在计算机科学中广泛用于表示各种关系和网络。本篇博客将深入介绍图的基本概念、邻接矩阵表示方法以及深度优先搜索&#xff08;DFS&#xff09;算法的C语言实现示例。 图的基本概…

C#的索引器

索引器 在 C# 中&#xff0c;索引器&#xff08;Indexer&#xff09;是一种特殊的属性&#xff0c;允许通过类的实例像访问数组一样访问对象的元素。索引器允许将类的实例作为集合来使用&#xff0c;可以按照自定义的方式访问类中的元素。 索引器的定义类似于属性&#xff0c…

wazuh环境配置及漏洞复现

目录 一、wazuh配置 1进入官网下载OVA启动软件 2.虚拟机OVA安装 二、wazuh案例复现 1.wazuh初体验 2.这里我们以SQL注入为例&#xff0c;在我们的代理服务器上进行SQL注入&#xff0c;看wazuh如何检测和响应 一、wazuh配置 1进入官网下载OVA启动软件 Virtual Machine (O…

Springboot使用Hibernate-search插件实现搜索

Hibernate search入门 原理是运用hibernate结合lucene来实现局部索引 1、引入jar包配置&#xff08;Hibernate和Lucene包&#xff09; <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <…

2023国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

c# 方法参数修饰符(out、ref、in)的区别

在C#中&#xff0c;ref、out和in是三种方法参数修饰符&#xff0c;它们在传递参数的方式和作用上有所不同。 ref修饰符&#xff1a; 传递方式&#xff1a;使用ref修饰符的参数可以是输入输出参数&#xff0c;即在方法调用前后都可以对其进行修改。 作用&#xff1a;通过ref修…

js实现滚轮滑动到底部自动加载(完整版)

这里我们用vue实现(原生js相似), 这里我们用一个div当作一个容器; <div class="JL" @scroll="onScroll" ref="inin"> <div v-for="(item,index) in this.list" :key="index" > ....…

JavaScript:交集和差集的应用场景

在集合A和集合B中&#xff0c;属于集合A&#xff0c;同时也属于集合B的元素组成的集合&#xff0c;就是交集。 在A中所有不属于集合B元素&#xff0c;组合成集合&#xff0c;就是差集。 那么在平时的开发中&#xff0c;如何使用差集和交集来解决问题呢&#xff1f; 现在有这…

springboot小知识:配置feign服务超时时间

背景&#xff1a;当前项目通过feign服务调用了其他两个项目的接口&#xff0c;但是由于特殊需求&#xff0c;需要调整某一个项目的feign服务的默认超时时间&#xff1a; 默认连接超时10秒&#xff0c;默认读取超时时间 60秒 1.找到定义的FeignClient 2.根据FeignClient定义的名…