不在傻傻for循环!完美解决JPA批量插入问题

2023-11-20

前言:jpa在简单的增删改查方面确实帮助我们节省了大部分时间,但是面对复杂的情况就显得心有余而力不足了,最近遇到一个批量插入的情况,jpa虽然提供了saveAll方法,但是底层还是for循环save,如果遇到大量数据插入频繁与数据库交互必然会对性能造成影响,查阅了很多资料也没有一个满意的结果,最后还是自己想出了一个方案
mysql是支持insert多个values的,所以我的思路就是拼sql然后利用SpringJdbcTemplate的excute方法执行原始sql,直接一次性插入,附上源码

StringBuilder insert = new StringBuilder("INSERT INTO `user_message` (`created_at`, `is_deleted`, `content`,`send_tm`,`status`,`type`,`user_id`) VALUES ");
        for (int i = 0; i < users.size(); i++) {
            insert.append("(").append("NOW()").append(",0,").append("'").append(content).append("'").append(",").append("'").append(format).append("'").append(",0,").append(type).append(",").append(users.get(i)).append(")");
            if (i < users.size() - 1) {
                insert.append(",");
            }
        }
        log.info("SQL语句:{}", JSON.toJSON(insert));
        try {
            jdbcTemplate.execute(insert.toString());
            return true;
        } catch (Exception e) {
            throw new BizException("sql解析错误");
        }

拼出来的sql语句

INSERT INTO `user_message` (`created_at`, `is_deleted`, `content`,`send_tm`,`status`,`type`,`user_id`) VALUES (NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,1),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,2),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,3),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,4),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,5)

在这里插入图片描述
成功插入

这里只是把关键部分贴出来,了解思路就好

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不在傻傻for循环!完美解决JPA批量插入问题 的相关文章

  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后

随机推荐

  • Spring IoC依赖注入的实现

    看了 spring技术内幕 的第二章 学习了spring的IoC容器的实现 对其做了浅显地分析 依赖注入的时机 如果配置文件有配置lazy init 那么依赖注入的时机发生在用户向IoC 容器索取bean的时候 即调用beanfactory
  • Django基础2——URL路由系统

    文章目录 一 基本了解 二 url路由分发 三 正则匹配 四 压缩归档超链接 优化一 使用分组名称功能 优化二 使用url名称功能 4 1 使用功能之前效果展示 4 2 使用功能之后效果展示 一 基本了解 概念 路由系统就是URL路径和视图
  • 字符串匹配算法总结

    转自 http blog csdn net zdl1016 archive 2009 10 11 4654061 aspx 我想说一句 我日 我讨厌KMP KMP虽然经典 但是理解起来极其复杂 好不容易理解好了 便起码来巨麻烦 老子就是今天
  • 面向对象设计 简述

    面向对象设计 面向对象的特性 将数据封装于类中 完全面型对象 封装 隐藏细节 只给出使用信息 公共的访问方式 隐藏对象的属性和实现细节 继承 继承就是子类继承父类的特征和行为 使得子类对象 实例 具有父类的实例域和方法 或子类从父类继承方法
  • nodeJs(express)文件上传配置

    用node作为服务器端 在需要上传文件到后台时 后台需要相应配置 简单配置如下 1 安装multer依赖 npm install multer save 渣渣前台的渣渣后台技术有限 不是自己配置的node服务器 使用的是webstorm自带
  • Android客户端apk自动检测更新自动下载自动安装的实现方法

    改进了一个可以检测版本更新自动下载自动安装的客户端升级方案 在下载之前删除之前的历史下载文件 减少垃圾数据 先给出核心类 public class DownloadService extends Service private Downlo
  • airpodspro没有弹窗_安卓党能用 AirPods Pro ?这样操作可以完美适配

    AirPods Pro一出现就引爆了市场 高达2000元的售价没能阻拦人们对它的狂热 目前AirPods已经在官网全面缺货 发货等待期甚至多达一个月 这是因为AirPods Pro的产品力实在太过出色 比它降噪强的没它小 比它小的没它降噪
  • C# A potentially dangerous 问题解决

    A potentially dangerous Request Path value was detected from the client 如果在页面中出现上述错误 只需在页面的头文件添加validateRequest false 即可
  • 【Vue基础】Vuex全局管理的基本代码结构及其使用

    Vuex全局管理的基本代码结构及其使用 一 代码结构及其使用 1 state 提供唯一的公共数据源 组件访问 state 中数据的第一种方式 this store state 全局数据名称 组件访问 state 中数据的第二种方式 mapS
  • UE4 使蓝图连接线出现小箭头标志

    当我们写的蓝图杂乱无章 甚至不能看清执行顺序的时候 只需要在偏好设置里设置一下就可以清晰的看清蓝图的执行顺序
  • 区块链+物联网 BOT

    不可否认 我们的一只脚已经迈入万物智联时代 但另一只脚迈入还存在一定的阻碍 区块链技术的出现将会促进这一进程的发展 智能音响 主人你好 我是小Q 现在是早上08点29分 上班时间要到咯 智能门锁 主人你摔疼我了 你总是这样匆忙 下次赶紧麻溜
  • 安装Python第三方库

    视频版教程 Python3零基础7天入门实战视频教程 在Python的标准安装中 包含了一组自带的模块 这些模块被成为 标准库 比如常用的math random datetime os json等等 此外 还有很多的第三方模块 或者叫做库也
  • 若以框架 vue富文本字符串中获取图片的存储路径

    若依的富文本 字符串是上述格式 我们要获取以下格式 就是图片的存储路径 有几个步骤 第一步 main js中添加两行代码 import axios from axios Vue prototype axios axios 第二步 Edit包
  • Python 笔记 — 单例模式和魔术方法

    目录 一 单例模式 1 概念 2 优点 3 使用 4 实现方法 5 运用 6 内存地址 7 通过 new 实现 8 通过 classmethod 9 通过装饰器实现 10 通过导入模块时实现 11 hasattr 函数 12 getattr
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • Android中项目中各个文件夹的含义和用途详解

    1 src 存放所有的 java源程序 2 gen 为ADT插件自动生成的代码文件保存路径 里面的R java将保存所有的资源ID 3 assets 可以存放项目一些较大的资源文件 例如 图片 音乐 字体等 4 res 可以存放项目中所有的
  • IntelliJ IDEA 2022.3 版本 IDAE 的Java 编译器错误问题解决方法

    2022 2 3 版本 IDAE 的Java 编译器错误问题解决方法 如果这是按照以前的办法就是去更改下面 的内容就可以OK了 但是在最新版中无论怎么修改都是无用 不知道为啥 随后我就在这里 是的就是上面 的第二张图中 将11 versio
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • 生产环境的域名地址与后端给的接口地址不一样时的配置(vue)

    1 找到 config dev env js 文件 module exports merge prodEnv NODE ENV development API ROOT http com 本地开发时用的域名 2 找到 config prod
  • 不在傻傻for循环!完美解决JPA批量插入问题

    前言 jpa在简单的增删改查方面确实帮助我们节省了大部分时间 但是面对复杂的情况就显得心有余而力不足了 最近遇到一个批量插入的情况 jpa虽然提供了saveAll方法 但是底层还是for循环save 如果遇到大量数据插入频繁与数据库交互必然