mybatis快速更新大量数据

Mybatis批量更新数据及其优化 临时关联更新操作不能应用在Trascational事务中,创建临时表的操作在事务中不支持,需要做其他处理;:定时任务中,从其他平台同步数据,并更新当前平台数据库,表数据3W+,分批更新某个字段,耗时巨大,约30min,尝试性能优化。2.先删后增,取出原数据内存中更新后,先将全表数据删除,再insert插入;或者设置标志字段,先增后删,思路一致。:当前场景需要去更新某个字段,且数据量较大,几百条数据每批进行更新,应用foreach循环更新时,耗时巨大;:使用临时表关联全表更新,一次关联,一次更新; 阅读详情

场景:工作中需要通过另一个表算出某字段的和,再更新其关联表的某个字段。数量量约700万,验收环境,2G内存。

方案一(不建议使用):通过分页查询(也可以org.apache.ibatis.session.ResultHandler的流操作平滑的通过流一条条查出数据,挺快的),再通过外键查到相关的数据在内存分组求和,更新列表的字段值,然后用java8流操作foreach挨个update(实体),耗时约6个小时。(其实际等价于一条一条的执行写好的sql执行,期间还有线程切换,IO等待,本需求一轮更新需要访问pageNum+2次数据库等)

方案二(推荐):同样通过分页查询,再通过外键查到相关的数据在内存分组求和,更新列表的字段值,然后选择一次性传到mybatis中,利用foreach批量更新。(其实际等价于如我们写好了1000条sql到命令台直接enter确认执行,本需求一轮更新只需要访问3次数据库)耗时只需要20分钟

所以:更快的更新的方案是:在理解业务背景下,尽量分批取出数据(需考虑内存是否溢出,选择合适的单批处理数),若有计算尽量查出来在内存执行,最后选择扔给mybatis,foreach批量更新/新建,相当于批量构建sql。

这里举一个mybatis的批量更新(新建同理)如下:


数据库连接必须配置:&allowMultiQueries=true

/**
 * 批量更新
 * @param list list
 */
void initUpdateBatch(@Param("list") List<Student> list);

<update id="initUpdateBatch" parameterType="list" >
    <foreach collection="list" item="item" index="index" open="" close=";" separator=";">
        update student_table set points= #{item.points}
        where id = #{item.id}
    </foreach>
</update>
MyBatis高效处理10,000条批量更新的最佳实践 处理10,000条批量更新时,MyBatis提供了多种解决方案。经过实践验证,ExecutorType.BATCH方式在大多数场景下表现最优。开发者应根据具体业务需求、数据库类型和数据规模选择合适的方案,同时注意事务管理、错误处理和性能监控,才能实现真正高效的批量操作。 阅读详情

相关推荐

Java框架之MyBatis Plus

MyBatis Plus 是一个功能强大且易于使用的数据库访问框架,它不仅简化了 MyBatis 的使用难度,还提供了许多实用的功能。无论是对于新手还是经验丰富的开发者,MyBatis Plus 都是一个值得尝试的选择。通过上述的介绍和代码示例,希望能帮助你更好地理解和使用 MyBatis Plus。

一个老Java开发的自白 1640

Mybatis BATCH模式批量更新大数据

mybatis batch批量更新

LPClan的博客 3332

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2395

Mybatis之批量更新数据(批量update)

当我们使用mybatis的时候,可能经常会碰到一批数据的批量更新问题,因为如果一条数据一更新,那每一条数据就需要涉及到一次数据库的操作,包括网络IO以及磁盘IO,可想而知,这个效率是非常低下的。而平时我们很少直接使用原生jdbc直接操作数据库,而是会使用比较成熟的ORM框架,那么今天我们就来总结一下,如何使用mybatis做批量更新。

carbuser_xl的博客 9万+

西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控

本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。

weixin_29271263的博客 245

飞控芯片的隐形战场:传感器冗余与实时OS的可靠性革命

本文深入探讨飞控芯片在工业级无人机中的可靠性设计,聚焦传感器冗余架构与实时操作系统(RTOS)的容错机制。通过多IMU备份、自适应加权融合算法及NuttX、ChibiOS等RTOS的故障隔离技术,确保系统在极端环境下毫秒级自愈。文章还涵盖开源生态如PX4的跨平台移植及RISC-V架构的应用,为高可靠性飞控系统提供关键技术参考。

z5a6b的博客 876

MyBatis foreach小记—— 批量update

    经常会用到mybatis的foreach标签来做循环操作,可以做一些sql的拼装等,标签的属性如下:collection 循环对象集合;item 每个迭代对象的别名;index 迭代索引值;open 循环语句的开始内容;separator 每次迭代之间的分隔符;close 循环语句的结束内容;    以mysql为例,批量操作的sql最常见就是通过in语句、批量insert语句等:1, d...

mingjia1987的博客 1万+

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

基于SqlSessionFactory的Mybatis批量更新

实现方式比较多,这里主要说明sqlSessionFactory实现的批量更新 1. 首先建一个spring工具类 用来自定义获取Mapper类 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframe...

汤圆一号已就位 2552

【目录】专栏文章导航

从最强工具链Davinci Configurator模块学习出发掌握AUTOSAR

weixin_47571898的博客 3285

RK3588网卡出现丢包或者带宽不足的问题验证排查

注意除了有最大的TCP数据接收缓冲,还有/proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲可以调整,这里暂时没用到,针对具体需要可适当调整。比如把ethx接口中断从默认的cpu0迁移到其它cpu,例如将eth0中断234移到cpu7 (10是16进制, cpu0 =3588的cpu有8个核,4个A55(小核)+4个A76(大核),可以找到对应中断 将中断从默认cpu0核切到cpu7。tcp_rmem:单位是字节,接收缓存区大小,缓存从对端接收的数据,后续会被应用程序读取。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2026

mybatis批量更新,参数Map

<update id="updateIotOnOffState" parameterType="java.util.Map"> <foreach item="value" index="key" collection="map.entrySet()" separator=";"> update iot_device set <...

qq_32232949的博客 1500

yolov5运行detect.py之后卡住了?没后续,没结果,没报错,怎么办?如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1103

mybatis批量操作

mybatis 批量新增 int batchInsertGoods(List<Goods> list); <insert id="batchInsertGoods" parameterType="java.util.List"> INSERT INTO goods(i_id, goods_name) VALUES <foreach collection="list" item="item" separator=","> (#{i

shisen0530的博客 229

RK3588+YT9215快速拓展以太网口

YT9215支持7个端口的非阻塞数据传输,确保高效的数据流处理;在开发过程中,最重要的一点就是YT9215与RK3588的GMAC连接和配置部分,下面是gmac1对应dtsi文件的修改,包括注释掉rgmii_phy1对应的mdio1,以及gmac1对应的phy-handle部分,同时将gmac1修改成1000Mbps全双工模式。这就是最简单,最快速的RK3588拓展网口的方法了,如果需要用到交换芯片的其他功能,那就不可以直接使用原厂提供的bin,而是需要对YT9215进行另外的驱动开发。

带着耳朵取流浪的博客 2783

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

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

可一次修改数据库多条数据 foreach 的使用

可一次修改数据库多条数据 foreach 的使用 xml语句 <update id="updateMltjb" parameterType="List" > <foreach collection="list" index="index" item="data1" separator=";"> update dw_factg...

asdasdsfaadasqw的博客 464

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

狂神Mybatis-Plus

B站狂神Mybatis-Plus学习笔记

rua的博客 300

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Mybatise,在xml中循环list或map

-- mybatise xml可以循环list/map等 UPDATE `standard_switchover` set sort= NULL #{sortMap[${key}]} WHERE id=#{key}

我能坚持多久的专栏 3976

Mybatisplus

Mybatisplus 为什么要用Mybatisplus? MybatisPlus可以节省我们大量的工作时间所有的CRUD代码都可以自动化完成 JPA、tk-mapper、Mybatisplus 简介 是什么?Mybatis本来就是简化JDBC操作的 官网:https://mp.baomidou.com/ MybatisPlus,简化Mybatis 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

weixin_47519002的博客 285

ssm+mysql自习室管理系统-计算机毕业设计源码92515

个人信息管理 用户或管理员管理主要提供用户信息编辑以及修改密码的功能。 查询座位信息 主要用于用户查看座位使用情况,以方便选择座位。 预约座位 用于用户选择预订座位。 用户信用管理 信用管理模块主要有查看个人信用情况以及信用手册查阅功能。 意见反馈 意见反馈给予用户提交、查看、删除以及修改意见的功能。 用户管理 用户管理是管理员添加、删除、删除以及查询用户的模块。 座位管理 座位管理是管理员添加、删除、删除以及查询座位的模块。 管理员信用管理 信用管理提供了黑名单管理以及信用守则管理功能。 公告管理

vx2_Biye_Design的博客 260

【MyBatis-Plus】一、快速入门

MyBatis-Plus是基于MyBatis的增强工具包,通过简化开发流程提升效率。它保持MyBatis灵活性的同时,提供开箱即用的功能,遵循"只做增强不做改变"的理念。核心优势包括:无侵入式集成、自动化CRUD操作、强大的条件构造器、分页插件和代码生成器。典型功能涵盖逻辑删除、自动填充、乐观锁等常见场景,特别适合快速开发业务系统。与原生MyBatis相比,MyBatis-Plus显著减少SQL编写量,内置丰富插件,提供代码生成支持,学习成本更低。通过简单配置即可实现高效数据库操作,大幅

m0_72516377的博客 917

MyBatis-Plus快速入门-(干货满满+超详细)

文章目录一、MyBatis VS JPA二、MyBatis-Plus简介三、MyBatis-Plus快速入门1、lombok简介及安装2、入门小案例四、基本使用1、通用传统模式简介及通用mapper新增方法2、常用注解3、排除非表字段的三种方式五、MyBatis-Plus查询方法 一、MyBatis VS JPA JPA: java持久层API,可以理解为一种规范,Hibernate就是其具体一个实现。(目前比较常用的是SpringDataJpa,它是Spring提供的一套简化开发的框架,按照约定好的方法命

一个爱运动的程序员的博客 10万+

关于mybatis,foreach插入大量数据过慢的测试与解决

长不看的结论:数据库链接的url中加入“&rewriteBatchedStatements=true”,然后使用sqlSession得到mapper来单次提交,最后flushStatements()提交给数据库,这样十几万的插入在2s左右 具体代码: ```java private void batchInsert(List list){ SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().op

qq_37414878的博客 1790

MyBatis-Plus 快速入门

MP 是 MyBatis 的增强工具,在保留 MyBatis 原有功能的基础上,提供了一系列实用特性,让开发者无需编写大量重复的 SQL 代码即可完成数据库操作。官方愿景是成为 MyBatis 的"最佳搭档",大幅提升开发效率。

2302_80253507的博客 990

如何快速集成数据访问层:3步实现MyBatis-Flex高效开发

MyBatis-Flex是一个优雅的MyBatis增强框架,专为解决传统ORM框架在复杂业务场景下的局限性而设计。在Java数据访问层开发中,你是否经常面临SQL编写繁琐、代码重复度高、多数据库适配困难等问题?本文将为你展示如何通过MyBatis-Flex快速构建高效、灵活的数据访问层,只需3步即可完成从零到一的完整集成。 ## 问题场景:传统数据访问的痛点 在传统Java开发中,数据访问层常

gitblog_01135的博客 409

Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发

由于在上一步我们配置了注释生成器,因此,我们要在相应的路径下,创建一个类,来自定义注释的生成规则。路径:org.javaboy.vhr.utils.CommentGenerator。

JavaBuild的博客 1480
上一篇: 切割List并分批处理
下一篇: maven 无法下载依赖jar包问题排查
_睶_
博客等级 码龄10年 1685粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值