记录一个mybatis-plus的批量修改的问题

MybatisPlus根据特定条件批量更新指定字段 查了相关资料,可用 on duplicate 也可以用 foreach 并开启&allowMultiQueries=true ,也可以自定义 SQL注入器扩展。那么null值,直接更新了,这明显就出bug了,但是又不能取消,因为确实有场景要用。乍一看看感觉没问题,但是如果Route bean中有。结合老项目实际情况。选择foreach 上代码。 阅读详情

使用@Update注解加<foreach>标签拼接sql语句

方式一

@Update({"<script>" +
                "<foreach collection = \"xxxs\" item = \"xxx\" separator = \";\">" +
                    "update `table_name` set `user` = #{xxx.user} where `id` = #{xxx.id} " +
                "</foreach>" +
            "</script>"})
    public void updateBatchSubConfig(List<xxx> xxxs);

使用这个方式当list的size等于1的时候没有问题,一旦size数量大于1就会报语法问题如下


### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update `table` set `user` = '1' where `id` = 2' at line 1
### The error may exist in com/sioo/agent/database/mapper/AgentMessageSubConfigMapper.java (best guess)
### The error may involve com.sioo.agent.database.mapper.AgentMessageSubConfigMapper.updateBatchSubConfig-Inline
### The error occurred while setting parameters
### SQL: update `table` set `user` = ? where `id` = ?  ; update `agent_message_sub_config` set `user` = ? where `id` = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update `table` set `user` = '1' where `id` = 2' at line 1
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update `table` set `user` = '1' where `id` = 2' at line 1

始终没研究出来是什么问题导致的,所以改成其他方式执行。

方式二

@Update({"<script>" +
            " update `table`" +
                " <trim prefix=\"set\" suffixOverrides=\",\">" +
                    " <trim prefix=\"user = case\" suffix=\"end,\">" +
                        "<foreach collection = \"xxxs\" item = \"xxx\" index=\"index\">" +
                            " when id = #{xxx.id} then #{xxx.acceptUser}" +
                        "</foreach>" +
                    "</trim>" +
                "</trim>" +
            "where " +
                "<foreach collection=\"xxxs\" separator=\"or\" item=\"xxx\" index=\"index\">" +
                    "id = #{xxx.id}" +
                "</foreach>" +
            "</script>"})
    public void updateBatchSubConfig(List<xxx> xxxs);

就相当于下面的语法,如果id等于1,user就等于name1,如果id等于2,user就等于name2

 UPDATE table
    SET user = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END
WHERE id IN (1,2,3)

这样就可以批量修改了

使用mybatis-plus批量插入遇到的两个问题记录 阅读详情

相关推荐

MyBatis-Plus批量插入性能优化:从伪批量到真批量的实战解析

在数据库操作中,批量插入是提升数据写入性能的核心技术之一,其原理在于将多条独立的插入操作合并,通过减少网络往返次数和数据库SQL解析开销来大幅提升效率。对于使用MyBatis-Plus框架的Java开发者而言,深入理解其默认的批量处理机制至关重要。MyBatis-Plus提供的`saveBatch`方法在默认配置下,可能并未真正利用JDBC的批量操作特性,而是转化为多次单条执行,这种“伪批量”方式在处理大量数据时,会因频繁的网络I/O和重复的SQL解析成为显著的性能瓶颈。通过分析其源码执行流程,可以明确其与

weixin_34210740的博客 567

Mybatis-plus批量操作

使用Mybatis-plus可以很方便的实现批量新增和批量修改,不仅比自己写foreach遍历方便很多,而且性能也更加优秀。但是Mybatis-plus官方提供的批量修改和批量新增都是根据id来修改的,有时候我们需求其他字段,所以就需要我们自己修改一下

小哥哥的博客 4万+

MyBatis-Plus 分页查询接口返回值问题剖析

问题本质当分页查询接口返回值定义为Page<T>时,MyBatis 会尝试将多条查询结果映射到一个Page<T>实例,从而导致错误。MyBatis-Plus 的设计MyBatis-Plus 使用IPage<T>作为分页查询的标准返回值类型,通过分页插件生成Page<T>对象并返回。最佳实践在定义分页查询接口时,应统一使用IPage<T>作为返回值类型,以避免异常并提高代码灵活性。通过本文的分析,相信读者对 MyBatis-Plus 的分页查询机制有了更深入的理解,并能在实际开发中避免类似问题的发生。

字节熊猫 2073

Mybatis-Plus批量添加或修改数据的三种方式

提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加。

纸上得来终觉浅,绝知此事要躬行 9147

SpringBoot快速教程四整合Mybatis-plus

SpringBoot3版本整合最新版Mybatis-plus的教程方便自己日常无缝迁移,那么来了,本篇教程就是基于SpringBoot3.3.4整合最新版的Mybatis-plus的3.5.7的SpringBoot3专属版本,希望大家可以和之前的Mybatis做一下对比,俗话说,没有对比,就没有伤害!

程序员Feri 1667

【ART-Pi与RT-Thread入门】①ART-Pi上手初体验

文章目录关于ART-Pi实物照片板载资源、扩展接口及驱动支持扩展引脚默认固件蓝牙配网微信扫描二维码设备选择 ART-Pi,输入所要连接的 WIFI SSID 和密码配网成功会显示IP地址打开IP地址Finsh控制台配网WindowsmacOS 关于ART-Pi ART-Pi是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。 实物照片 板载资源、扩展接口及驱动支持 扩展引脚 其中P1排扩展引脚座兼容树莓派的扩展接口,并

SimonLiu的博客 5831

mybatis-plus的批量新增/批量更新以及问题

批量新增/修改的几种常用方法实现

Filwaod 5万+

【随机过程】第二章——随机过程概论

随机过程概论,说明《随机过程》课程的教学大纲,对随机过程概念、研究对象和研究方法做了简要介绍。

weixin_45225032的博客 1365

Mybatis-Plus的SQL注入器实现批量插入/修改,效率比较

Mybatis-Plus的自定义SQL注入器

CSYZA的博客 6814

研究生课程笔记:软件包在流行病学中的应用(三)——STATA软件

关键词:STATA软件基本操作、STATA对于流行病学研究的实现、STATA对复杂抽样设计样本量计算的实现 一、STATA软件基本操作 这部分网上教程有很多,也可以直接根据stata自带的help功能进行自学,在此只记录课程中提及的功能项。 1. 变量编辑 1.1 赋值:label type(按精度区分) 1) 整型:int(32), short(16), long(32) 2) 实型:flo...

weixin_45463530的博客 2432

【效率手册】Kylin-Desktop-V10-SP1 麒麟系统核心组件实战——从入门到精通的6个关键场景

本文针对Kylin-Desktop-V10-SP1麒麟系统用户,通过文件管理、系统监视、设置优化等6个核心场景实战,深度解析如何高效运用系统内置工具解决文件混乱、性能卡顿、外设驱动等实际问题,帮助用户从功能认知跃升至场景化应用,真正释放国产操作系统的生产力潜能。

weixin_29208327的博客 119

Mybatis-plus批量插入、批量修改数据saveBatch等速度缓慢

[转]Mybatis-plus批量插入、批量修改数据saveBatch等速度缓慢背景处理 Arebirth博客园: 原文链接 背景 使用mysqlPlus. 不管是updateBatch, 还是saveBatch, 800条左右的数据, 耗时都超过1s以上 尝试更改每次批量处理的数量, 比如: super.updateBatchById(list,1000); 如果不传第二个参数, mysqlPlus默认是1000. 这个根据调整, 发现低于1000, 耗时增加,1500到2500ms左右, 因为sq

zzzgd_666的博客 2万+

分数间隔均衡器的基本原理及应用(使用Matlab)

通过对接收信号进行加权求和,分数间隔均衡器可以抵消信号在传输过程中受到的频率响应失真。Matlab提供了丰富的工具和函数,可以方便地实现分数间隔均衡器,并进行性能评估。分数间隔均衡器(Fractional Interval Equalizer)是一种数字信号处理技术,用于均衡带通信道中的信号失真。分数间隔均衡器的基本原理是通过对接收信号进行加权求和,以抵消信号在传输过程中受到的频率响应失真。分数间隔均衡器在通信系统中具有广泛的应用。最后,我们通过比较均衡后的信号和发送数据的阈值来进行解调,并计算误码率。

2301_79325657的博客 685

Mybatis的批量操作

每种方法都有其适用场景和限制。例如,使用 标签生成的批量 SQL 在某些数据库中可能因为 max_allowed_packet 大小限制而失败。因此,在选择批量处理方案时,需要根据具体的业务需求和数据库特性进行综合考虑。愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!

weixin_45809780的博客 2603

huggingface高速下载模型的实战代码

本文主要介绍了huggingface高速下载模型的实战代码,尤其是无法通过国内源进行下载的huggingface模型,希望能对学习大模型的同学们有所帮助。需要特别说明的是,本文的代码是完全原创的,即能够最大限度利用宽度的速度,而且还能实现断点续传。 文章目录 1. 背景 2. 实战代码

herosunly的博客 29万+

Oracle EBS 帐套(Ledger/SOB)如何定义会计主体、如何支撑多准则 / 多报告、组织与帐套的绑定关系、以及项目落地时的设计差异。下面从实现逻辑、核心要素、组织模型、多账簿、科目设计、项

本文对比了Oracle EBS R12与SAP S/4HANA在帐套(Ledger)设计上的核心差异。Oracle采用4C架构(科目/币种/日历/准则),帐套作为独立会计主体,主辅账物理隔离;SAP则以公司代码为主体,通过平行分类账在同一凭证中实现多准则核算。关键差异体现在:Oracle强调边界隔离,适合差异大的集团;SAP注重统一视图,适合实时合并需求。实施时需注意:Oracle避免过度建账套,SAP需统筹科目与维度设计。两者分别体现了"盒子"与"滤镜"的设计哲学。

金牌架构师 419

记 mybatis-plus 批量插入为什么是单条的

记 mybatis-plus 批量插入saveBacth入坑过程 == 熊大== 背景: 每天定时从sftp上下载文件,解析文件组装参数然后批量入库,方便数据组抽数。 sftp上共五个文件其中有两个文件内容可能超过几百万而数据库是mysql所以决定分表。 按天分表结果就是表太多而且又浪费空间嫌疑所以pass。 按月分表程序运行一年后会导致单表数据过多所以也不符合pass。 按年月分表是比较符合业务需求并且不会太浪费空间所以决定

aiailingfei的博客 6099

备战数学建模38-粒子群算法pso番外篇1(攻坚战2)

粒子群算法最初是根据鸟类群体行为得到的启发,对鸟群行为进行仿真的算法,是一种启发式算法,也就是智能优化算法,利用信息共享,通过中间信息进行改进搜索,从而获得问题的可行解。我们简单从下图去体会一下粒子群算法,就是有多个鸟,每个鸟相当于一个粒子,每只鸟的位置受自己认知的历史最佳位置和当前距离食物最近的鸟的位置的影响。我们进一步分析这个图,可以得到两个公式,第一个是速度公式,即每只鸟的当前速度受上一步的速度惯性,自我认知和社会认知三部分影响,第二个是位置公式,即每只鸟的位置受上一位置和上一位置的速度的影响。

nuist_NJUPT的博客 1666

如何高效使用 Mybatis-Plus 的批量操作

Mybatis-Plus 提供了强大的批量操作 API,能够帮助开发者高效处理大量数据。通过分批处理、使用 JDBC 批处理、调整数据库连接池配置等优化策略,可以进一步提升批量操作的性能。同时,结合事务管理,能够确保批量操作的数据一致性和原子性。在实际开发中,开发者应根据具体业务场景,合理选择批量操作的方式和优化策略,以达到最佳的性能和可靠性。希望本文能够帮助大家更好地理解和使用 Mybatis-Plus 的批量操作功能。

秋元的博客 1763

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录

为什么需要为数据库的 email 字段建立索引 为数据库中的 email 字段建立索引是数据库优化的重要实践

布说在见的博客 4406

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MyBatis-Plus更新操作:单条与批量更新实战

本文介绍了使用MyBatis-Plus实现数据库单条和批量数据更新的方法。主要内容包括:通过UpdateWrapper创建更新条件和内容,调用Mapper接口的update方法执行操作;提供完整的Java代码示例,展示单条更新(指定ID修改)和批量更新(条件筛选修改)的实现;通过流程图说明更新流程;针对更新过程中可能出现的字段未更新和数据不一致问题,提出设置完整字段和使用@Transactional事务的解决方案。文章帮助开发者掌握MyBatis-Plus的核心更新操作,为后续学习删除操作奠定基础。

fykam的博客 2793

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mybatis-plus saveOrUpdate详细解析

- 插入新记录:当对象的所有字段都为新值且对象的主键字段未设置或设置为默认值时,saveOrUpdate将执行插入操作。 - 更新现有记录:如果对象的主键字段设置了有效的值,并且该值对应于数据库中现有的记录,那么saveOrUpdate将执行更新操作。

骑着猪看大海的博客 6974

MyBatis-Plus数据变更记录拦截器:轻松实现数据库操作审计的终极指南

你是否在为数据库操作审计而烦恼?想要记录每一次数据变更却不想写重复代码?MyBatis-Plus的DataChangeRecorderInnerInterceptor拦截器为你提供了一套完整的解决方案!这个强大的数据变更记录功能能够自动捕获INSERT、UPDATE、DELETE操作,生成详细的变更日志,让数据库审计变得简单高效。 ## 为什么需要数据变更记录? 在企业级应用开发中,数据变更记

gitblog_00200的博客 692

MyBatis-Plus之通用service

说明:通用service用前缀命名方式区分Mapper层避免混淆,get:查询单行,remove:删除,list:查询集合,page:分页MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑IService: 二、创建自己的service接口和实现类 1.UserService接口 2.UserServiceImpl 三、测试类 1.查询总记录数 2.批量插入 插入的五条数据:name:szy0 szy1 szy2 szy3 szy4

2201_76081438的博客 1272

【第14章】MyBatis-Plus批量操作

批量操作是一种高效处理大量数据的技术,它允许开发者一次性执行多个数据库操作,从而减少与数据库的交互次数,提高数据处理的效率和性能。数据插入(Insert):批量插入是批量操作中最常见的应用场景之一。通过一次性插入多条记录,可以显著减少SQL语句的执行次数,加快数据写入速度。这在数据迁移、初始化数据等场景中尤为有用。数据更新(Update):批量更新允许同时修改多条记录的特定字段,适用于需要对大量数据进行统一变更的情况,如批量修改用户状态、更新产品价格等。

zjg 2765

mybatis-plus异常问题记录

mybatis问题记录

weixin_43157978的博客 3271
下一篇: 深度解析InheritableThreadLocal
HuangSl_java
博客等级 码龄9年 11粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值