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

MuJoCo柔性体仿真实战:从FlexComp建模到自定义模型导入

柔性体仿真是机器人交互研究中不可或缺的一环,MuJoCo作为高精度物理求解器,凭借高效的求解速度与批量并行能力,成为强化学习与软体抓取任务的热门选择。其FlexComp机制将连续材料离散为粒子-约束系统,以较低建模成本模拟布料、软组织等形变行为,相比Gazebo等平台更具实时性与可扩展性。技术价值体现在自定义柔性体建模与导入流程中:通过XML配置网格密度、间距与材料参数,即可生成贴合任务需求的软体垫子或硅胶抓手。在柔性抓取、颗粒抓手、医疗仿真等场景中,该方法能快速构建可训练的环境。围绕环境搭建、FlexCo

weixin_29045585的博客 156

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

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

carbuser_xl的博客 9万+

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8970

基于Java+SpringBoot+Vue的中小企业设备管理系统的设计与开发(源码+lw+部署文档+讲解等)

💗博主介绍:✌新人博主,工作经验两年+、专注于Java、小程序技术领域和毕业项目实战✌💗🌟文末获取源码+数据库🌟

2301_76502068的博客 1382

MyBatis foreach小记—— 批量update

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

mingjia1987的博客 1万+

计算机组成原理实验(已通关)-华中科技大学头歌Educoder(Logisim)

汉字国标码转区位码实验 汉字机内码获取实验 8位可控加减法电路设计 第2关 CLA182四位先行进位电路设计 第3关 4位快速加法器设计 第4关 16位快速加法器设计 第5关 32位快速加法器设计 第6关 5位无符号阵列乘法器设计 6位有符号补码阵列乘法器 乘法流水线设计 原码一位乘法器设计 偶校验编码设计 偶校验解码电路设计 16位海明编码电路设计 16位海明解码电路设计 海明编码流水传输实验 16位CRC并行编解码电路设计 CRC编码流水传输实验

紫荆鱼的博客 4万+

基于SqlSessionFactory的Mybatis批量更新

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

汤圆一号已就位 2552

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

海康威视 2024届 数字逻辑设计 实习笔试分析

记录一下 5月11日晚,做的海康威视的一场笔试。分享给需要的IC人。 岗位:数字逻辑设计工程师(浙江 杭州) 转载需要本人同意! 我的见解不一定都是准确的,欢迎评论区交流指正~~

记录所学,分享知识,结识挚友 1万+

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

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 404

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

YOLOv8损失函数改进大全:从IoU到FocusIoU的20+种变体全解析(附完整适配代码+性能对比)

目标检测边界框损失函数演进与优化 摘要:边界框损失函数是目标检测模型定位精度的关键因素。本文系统分析了从基础IoU到最新FocusIoU的20余种损失函数的演进历程,包括四代主要技术:基于重叠区域的IoU/GIoU,结合距离度量的DIoU/CIoU,优化形状匹配的EIoU/RIoU,以及考虑方向性的SIoU/WIoU/FocusIoU。针对YOLOv8模型,提供了完整的损失函数实现代码和替换方案,实验表明优化后的损失函数在复杂场景下可提升mAP@0.5达3.2%。文章特别对比了不同损失在小目标、遮挡和密集场

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 996

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

asdasdsfaadasqw的博客 464

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

狂神Mybatis-Plus

B站狂神Mybatis-Plus学习笔记

rua的博客 300

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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、付费专栏及课程。

余额充值