iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >spring data jpa开启批量插入、批量更新的示例分析
  • 113
分享到

spring data jpa开启批量插入、批量更新的示例分析

2023-06-20 18:06:16 113人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关spring data jpa开启批量插入、批量更新的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ORM框架,最早我用的是jdbcTemplate,后来用了mybatis,唯独

这篇文章给大家分享的是有关spring data jpa开启批量插入、批量更新的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

ORM框架,最早我用的是jdbcTemplate,后来用了mybatis,唯独没有用过JPA(Hibernate)系的,过去觉得Hibernate太重量级了,后来随着SpringBoot和spring data jpa出来之后,让我觉得好像还不错,再加上谷歌趋势。。。

spring data jpa开启批量插入、批量更新的示例分析

只有中日韩在大规模用Mybatis(我严重怀疑是中国的外包),所以就很奇怪,虽然说中国的IT技术在慢慢抬头了,但是这社会IT发展的主导目前看来还是美国、欧洲,这里JPA、Hibernate是绝对的主流,那么我觉得学习并以JPA为主开发是我接下来个人项目的选择。

那么经过几天简单的摸索,发现JPA可以说是非常的好用,尤其DDD设计思想简直完美符合现在springboot、微服务的设计理念(仅代表个人看法)。

不过呢,在使用过程中就会遇到一个问题,我之前写的爬虫插入效率非常低,一方面是因为我服务器Mysql表现的极差,详情请看:

[评测]低配环境下,postgresqlMysql读写性能简单对比(欢迎大家提出mysql优化意见)

另外一方面,JPA的批量插入源码

spring data jpa开启批量插入、批量更新的示例分析

spring data jpa开启批量插入、批量更新的示例分析

这saveAll明明就是循环调用save方法了啊,我们写个简单的测试插入数据方法试一下:

spring data jpa开启批量插入、批量更新的示例分析

我们打开了Hibernate显示sql日志,看一下输出结果:

spring data jpa开启批量插入、批量更新的示例分析

看日志,JPA是先把所有的数据全查出来了,如果数据库有就更新,没有就新增。我们再看一下阿里的监控,如果没有配可以按照这个文章里面的方法配

springboot2.0配置连接池(hikari、druid)

spring data jpa开启批量插入、批量更新的示例分析

我插了5条数据,结果执行了10次sql,这特么。。。我不太能理解,可能是我太菜了?我跑脚本至少了成千上万条数据往库里插,这种写法得给我辣鸡数据库写死。

并且这样效率也太低了吧,查询不会用in?insert不会拼sql?并且很多场景我自己能控制是插入还是新增,我根本不需要你给我校验一次,我只想安安静静的插数据,那么有没有办法呢?有的。

在配置文件里加入:

spring.jpa.properties.hibernate.jdbc.batch_size=500spring.jpa.properties.hibernate.jdbc.batch_versioned_data=truespring.jpa.properties.hibernate.order_inserts=truespring.jpa.properties.hibernate.order_updates =true

这个batch size建议设置成你数据库每秒最大写入数/2 ,没有理由只是我自己感觉这样好一点。。。

自己在repository里面定义两个接口 batchSave,batchUpdate并实现:

@Override    @Transactional    public <S extends T> Iterable<S> batchSave(Iterable<S> var1) {        Iterator<S> iterator = var1.iterator();        int index = 0;        while (iterator.hasNext()){            em.persist(iterator.next());            index++;            if (index % BATCH_SIZE == 0){                em.flush();                em.clear();            }        }        if (index % BATCH_SIZE != 0){            em.flush();            em.clear();        }        return var1;    }
@Override    public <S extends T> Iterable<S> batchUpdate(Iterable<S> var1) {        Iterator<S> iterator = var1.iterator();        int index = 0;        while (iterator.hasNext()){            em.merge(iterator.next());            index++;            if (index % BATCH_SIZE == 0){                em.flush();                em.clear();            }        }        if (index % BATCH_SIZE != 0){            em.flush();            em.clear();        }        return var1;    }

然后对批量插入的入口稍作改动,改成刚刚自己实现的调用batchSave的方法

spring data jpa开启批量插入、批量更新的示例分析

我们运行一下看看结果:

spring data jpa开启批量插入、批量更新的示例分析

这次500条用了778毫秒,跟之前5条712相差不多,但是我们大家看到了,控制台打印了500条插入语句。。。这个导致我一度以为批量插入失败了,按理说看时间是成功了呀,所以后来配置了阿里的监控一看:

spring data jpa开启批量插入、批量更新的示例分析

放心了,是Hibernate自己日志打印有问题,所以后来我给Hibernate日志打印关掉了,专心用阿里的druid

感谢各位的阅读!关于“spring data jpa开启批量插入、批量更新的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: spring data jpa开启批量插入、批量更新的示例分析

本文链接: https://www.lsjlt.com/news/298996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • spring data jpa开启批量插入、批量更新的示例分析
    这篇文章给大家分享的是有关spring data jpa开启批量插入、批量更新的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ORM框架,最早我用的是jdbcTemplate,后来用了Mybatis,唯独...
    99+
    2023-06-20
  • spring data jpa开启批量插入、批量更新的问题解析
    最近准备上spring全家桶写一下个人项目,该学的都学学,其中ORM框架,最早我用的是jdbcTemplate,后来用了Mybatis,唯独没有用过JPA(Hibernate)系的,...
    99+
    2024-04-02
  • 解决spring data jpa 批量保存更新的问题
    spring data jpa 批量保存更新问题 使用jpa批量保存时,看日志发现是一条一条打印的,然后去看了下源码,果然是循环调用的单个保存(巨坑啊) 经查询jpa是可以实现批量...
    99+
    2024-04-02
  • 大批量数据分批批量插入或更新(Mybatis+MySQL)
    大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成...
    99+
    2023-08-30
    mybatis mysql 数据库 java spring boot
  • mybatis 的批量更新和批量插入(清晰明了)
    mybatis批量插入 SELECT LAST_INSERT_ID() AS ID INSERT INTO rp_feno_app_rh_hard_device...
    99+
    2023-09-10
    mybatis java mysql
  • MyBatis批量查询、插入、更新、删除的实现示例
    目录1.批量查询1.1在CityBatchMapper中接口代码1.2 在CityBatchMapper.xml中SQL代码2.批量插入2.1在CityBatchMapper中接口代...
    99+
    2023-05-20
    MyBatis批量查询 MyBatis批量插入 MyBatis批量删除
  • mybatis批量插入10万条数据的示例分析
    这篇文章给大家分享的是有关mybatis批量插入10万条数据的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据库 在使用mybatis插入大量数据的时候,为了提高效率,放弃循环插入,改为批量插入,map...
    99+
    2023-06-14
  • clickhouse批量插入数据及ClickHouse常用命令的示例分析
    小编给大家分享一下clickhouse批量插入数据及ClickHouse常用命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.安装使用ClickHo...
    99+
    2023-06-29
  • DNS批量溢出的示例分析
    这篇文章主要介绍DNS批量溢出的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:@shift 1  @ setlocal  @ cls  @...
    99+
    2023-06-09
  • mybatis批量更新插入,解决失败的问题
    update sys_issue first_class = #{item.first}, second_class = #{item.second}, up...
    99+
    2023-09-01
    mybatis mysql java
  • MySql快速插入以及批量更新的方法
    这篇文章主要讲解了“MySql快速插入以及批量更新的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySql快速插入以及批量更新的方法”吧!插入:  M...
    99+
    2024-04-02
  • Mybatis Plus 实现批量插入的示例代码
    目录一. 添加依赖二. 继承默认方法注入三. 在 MybatisPlusConfig 配置文件中注入 Bean四. 扩展自带 BaseMapper五. 业务层面实现Mybatis P...
    99+
    2024-04-02
  • MySQL批量SQL插入的性能优化示例
    小编给大家分享一下MySQL批量SQL插入的性能优化示例,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像...
    99+
    2024-04-02
  • SqlServer中批量update语句的示例分析
    这篇文章给大家分享的是有关SqlServer中批量update语句的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。现在我有两张表分别是S_PERSON,S_US...
    99+
    2024-04-02
  • DOS批处理中变量的示例分析
    这篇文章主要介绍了DOS批处理中变量的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、系统变量他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给...
    99+
    2023-06-08
  • Django REST Framework 批量操作的示例分析
    这篇文章将为大家详细讲解有关Django REST Framework 批量操作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DRF基本情况我们以下面的代码作为例子:models:from&nb...
    99+
    2023-06-15
  • MySQL和Oracle批量插入SQL的通用写法示例
    目录举个例子:通用写法:总结举个例子: 现在要批量新增User对象到数据库USER表中 public class User{ //姓名 private Strin...
    99+
    2024-04-02
  • mysql大批量插入数据的4种方法示例
    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用,但是...
    99+
    2024-04-02
  • ReactHooks批量更新state及获取路由参数示例解析
    目录一、如何批量更新控制台输出二、Hooks如何获取路由参数执行效果 一、如何批量更新 在【Hooks】中如果单独的进行状态的更新可能会导致页面的多次渲染: import { u...
    99+
    2024-04-02
  • 利用MySqlBulkLoader实现批量插入数据的示例详解
    目录介绍1.将List转化为DataTable 2.将DataTable转换为标准的CSV文件 3.CSV文件导入数据到数据库4.使用MySqlBulkLoade...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作