使用spring jdbc的batchUpdate功能提高性能

【经验篇】JdbcTemplate数据批量操作性能优化 最近在项目中使用进行批量数据更新/删除时,小数据量场景下,性能较为优越。但是在进行大量数据(如10万条)的更新操作时,可能会遇到性能问题。 阅读详情

在spring batch中,我们经常使用spring提供的jdbcTemplate进行数据库操作。

假设有一张表People.我们需要插入多条数据。处理的方法有两种:

第一种方法是对每一个数据,都执行一直insert命令:

jdbcTemplate.update(INSERT_PEOPLE_QUERY, people.getFirstName(), people.getLastName());

第二种方法是使用batchUpdate的方法:

jdbcTemplate.batchUpdate(INSERT_PEOPLE_QUERY, transformToObjects(peoples));


private List<Object[]> transformToObjects(List<People> peoples) {
        return from(peoples).transform(new Function<People, Object[]>() {
            @Override
            public Object[] apply(People people) {
                return new Object[]{people.getFirstName(), people.getLastName()};
            }
        }).toList();
    }


如果需要大量更新数据,并且使用的jdbc driver支持batchUpdate的情况下,使用batchUpdate会比直接执行逐行执行update效率快一个数量级。但如果jdbc不支持batchUpdate,那么jdbcTemplate的batchUpdate在其内部仍然是逐行执行。

我使用postgreSQL进行试验:

当需要插入1000个People时,逐行插入需要4秒,使用batchUpdate需要时间不到1秒

当需要插入10000个People时,逐行插入需要17秒,使用batchUpdate仅仅需要1秒


Spring—— 源码分析之 JDBCTemplate.batchUpdate() Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造  JDBC的batch操作:  String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)"; ListCustomer> customer 阅读详情

相关推荐

【项目实战】使用JdbcTemplate.batchUpdate执行批量更新操作(批处理)

JdbcTemplate,提供了大量的方法来帮助开发者执行JDBC操作。其中,batchUpdate方法是JdbcTemplate中非常重要的一个方法。batchUpdate方法是Spring框架中非常实用的功能之一。batchUpdate方法是JdbcTemplate中用于执行批量更新操作的。batchUpdate方法可以显著提高处理大量数据时的效率。batchUpdate方法可以一次性执行多条SQL语句,以简化数据库操作。

奶爸的编程之路,也就一周冷个三天 3230

Spring JdbcTemplate.batchUpdate()

在此页面上,我们将学习使用Spring JdbcTemplate.batchUpdate()方法。batchUpdate()方法使用批处理发出多个 SQL。batchUpdate()接受参数如下。使用批处理在单个 JDBC 语句上发出多个 SQL 更新。如果 JDBC 驱动程序不支持批处理更新,则该方法将回退到单个语句上的单独更新。使用批量更新和设置值在单个PreparedStatement上发出多个更新语句。

allway2的博客 1万+

tcl脚本语言之file的常见用法

这些命令覆盖了从文件属性获取、修改、复制、删除、路径处理等广泛的文件操作需求。命令用于处理文件系统操作。

hzmscut的博客 5149

JdbcTemplate的使用

JdbcTemplate的使用

qingfengmax的博客 4679

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1581

spring-ai学习(四)-MCP

创建一个springai项目1.依赖。

zql1455890112的博客 1384

mysql jdbc查询慢 spring_为什么Spring的jdbcTemplate.batchUpdate()这么慢?

8 个答案:答案 0 :(得分:12)JDBC连接URL中的这些参数可以对批量语句的速度产生很大影响 - 根据我的经验,它们可以加快速度:useServerPrepStmts =假安培; rewriteBatchedStatements =真答案 1 :(得分:10)我也遇到了与Spring JDBC模板相同的问题。可能在Spring Batch中,语句在每个插件或块上执行并提交,这会减慢速度。我...

weixin_39824834的博客 1358

一、5.8GHz射频接收机链路仿真

5.8GHz射频接收机链路仿真 一、5.8GHz射频接收机链路仿真 文章目录5.8GHz射频接收机链路仿真目的一、原理1、仿真工具2、二次下变频超外超接收机二、要求三、内容总结 目的   1、熟悉射频接收机整体结构。   2、学习使用MATLAB工具进行行为级仿真。   3、进行简单的通信链路预算。   4、直观感受接收机各个模块对整体性能的影响。   5、分析增益、线性度、噪声系数等参数。 一、原理 1、仿真工具   MATLAB是一款功能强大的数学软件,针对不同领域提供各种工具箱,帮助设计者快

平乾的博客 6760

mysql batchupdate_Spring JdbcTemplate batchUpdate() 实例

在某些情况下,可能需要将一批记录插入到数据库中。如果你对每条记录调用一个插件的方法,SQL语句将被重复编译,造成系统缓慢进行。在上述情况下,你可以使用 JdbcTemplate BATCHUPDATE()方法来执行批量插入操作。用这种方法,该语句只被编译一次,执行多次。详见 JdbcTemplate 类的 BATCHUPDATE()示例。//insert batch examplepublic v...

weixin_39747049的博客 320

光耦选型避坑指南:如何根据CTR参数精准计算输入输出电阻(附24V工业场景实例)

本文深入解析光耦选型核心,聚焦电流传输比(CTR)参数及其衰减特性,提供从输出需求反向推导输入输出电阻的精准计算方法。文章以24V工业场景为例,结合光电耦合器数据手册,详细阐述了如何根据CTR最小值进行降额设计,并给出包含反接保护、TVS管等在内的完整保护电路方案,旨在构建高可靠、长寿命的信号隔离电路,避免因选型或设计不当导致的系统故障。

nept的博客 1040

基于STM32设计的消防小车

当前基于STM32单片机设计了一款智能消防小车;当前小车支持烟雾浓度检测、可燃气体检测,环境温度湿度检测、火焰源检测、能支持远程遥控,方便消防员远程操控进行灭火。小车也支持自动消防,在行驶过程中,消防智能小车通过火焰传感器感应火源以检测火焰具体位置,可以利用算法设计进行循迹灭火,该模式下驱动电机水泵喷水,可以有效控制火源的第二次发生,从而完成消防作业。小车本身带了超声波测距模块,红外壁障模块,在自动或者手动控制行驶过程中可以防止碰到障碍物损伤小车。

7375

Spring data batchUpdate自定义Query问题

在搭建应用时,一个功能需要把一个Collection中所有对象添加到MySQL数据库中,如果该对象已经存在,则增加数据库中那一项的一个attribute,frequency的值。 实现这个功能时需要数据库进行多次单独添加(INSERT)操作,导致运行速度缓慢。之前使用DynamoDB时注意到有BatchWrite这种功能,所以想要找到MySQL中对应的功能。 在网上搜索后发现MySQL 的in...

weixin_43794286的博客 583

cartographer 添加二维码、apritag码作为路标点,测试位置关系

这里记录一下cartographer里面的路标点是如何转换的,首先你要知道路标点在相机坐标系的位置(很多二维码读码器的关系恰好相反,是相机在二维码的坐标系),然后要知道相机坐标系和小车坐标系(一般为base_link)之间的关系。中间用tf_broadcaster_发出来便于查看是否设置正确 void Node::HandleLandmarkMessage( const int trajectory_id, const std::string& sensor_id, const ca

南北粉面馆 2431

mysql jdbc查询慢 spring,为什么Spring的jdbcTemplate.batchUpdate()这么慢?

I'm trying to find the faster way to do batch insert.I tried to insert several batches with jdbcTemplate.update(String sql), wheresql was builded by StringBuilder and looks like:INSERT INTO TABLE(x, y...

weixin_39606575的博客 289

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3654

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL为什么Spring的jdbcTemplate.batchUpdate()这么慢?

Spring 的 JdbcTemplate.batchUpdate() 本身并不会影响性能,实际上 SQL 语句和 MySQL 数据库的处理方式才是决定因素。要改善性能,可以使用 JDBC 的批处理来批量执行 SQL 语句,或使用 MySQL 的多值插入来优化批处理。

LoveSummer 3718

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

batch执行流程 spring_Spring: 源码分析之 JDBCTemplate.batchUpdate()

Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造 JDBC的batch操作:String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";List customers = getCustomersToInsert();PreparedS...

weixin_39682511的博客 633

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Jdbc的基本使用

认识 spring jdbc JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。 ​JdbcTemplate是Spring的一部分...

qq_40179479的博客 264

jdbc的batchupdate

问题的起点1,接手深圳地税银税扣款接口2,发现扣款业务数据操作流程中,事务控制存在问题过程:1,在看了jdk142doc和spring、hibernate api-doc后,发现在doc里面,就已经提及,doc只约定了应该要保证batchupdate,但是具体依赖于不同DB的jdbc驱动2,不同的jdbc驱动处理batchupdate可能有几种情况 a,完整按照jdbc

efoxboy的专栏 2785

jdbcTemplate.batchUpdate没有批量执行

这两天再用jdbcTemplate.batchUpdate方法的时候遇到了一些小问题,拿出来分享一下。 数据库使用的是mysql5.6版本。由于项目中需要一次性插入多条数据,所以使用jdbcTemplate的batchUpdate批量执行的方法,方法如下: public void batchSave(List list) { String sql = "xxxxxxxxxx";...

小龙 1341

jdbctemplate 插入null_Spring: 源码分析之 JDBCTemplate.batchUpdate()

Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造 JDBC的batch操作:String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";List customers = getCustomersToInsert();PreparedS...

weixin_42489917的博客 929

Spring里配置的JDBC-Template最详细讲解

为什么要用JDBC-Template 可以简化持久代码,在持久层有很大用处,什么叫持久层,就是实现增删改除等功能的一个抽象层面,是和数据库直接打交道的层。为什么说可以简化持久代码呢,大家都知道JAVA传统JDBC的流程 首先创建加载驱动,通过加载驱动取得与数据库的连接,通过连接创建语句来实现增删改除。通过下面对比可以看出Template的具体简化作用 比如来一个查询结果 //传统 JDBC AP...

毛聿修的博客 3104

使用Spring JDBC批量更改数据

在项目中,如果需要一次性插入或更新多条记录,当然可以简单地通过多次调用update()方法完成任务,但这不是最好的实现方案。更好的选择是使用JDBCTemplate批量数据更改的方法。一般情况下,后者拥有更好的性能,因为更新的数据将被批量发送到数据库中,它减少了对数据库访问的次数。JDBC有2个批量数据操作的方法: 了解springcloud架构可以加求求:三五三六二四七二五九   public ...

weixin_45821812的博客 408

Spring JdbcTemplate批量操作实战:原理、性能优化与避坑指南

在Java后端开发中,数据库操作是系统性能的关键瓶颈之一。其核心原理在于通过减少网络往返次数和事务开销来提升效率,这通常涉及JDBC批处理机制。从技术价值看,高效的批量操作能显著降低数据库连接压力、减少锁竞争时间,并提升数据处理吞吐量,这对于高并发、大数据量的业务场景至关重要。在实际应用场景中,无论是用户状态同步、商品信息入库还是日志批量处理,掌握正确的批量更新与新增技术都能带来数量级的性能提升。本文聚焦于Spring JdbcTemplate的批量操作,深入解析其底层机制、参数配置如`rewriteBat

weixin_34406086的博客 446
上一篇: 女友楼下的小超市
下一篇: 使用Spring中Transcation进行数据库集成测试
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值