讲师中心 微信公众号
AI工具推荐 视频效率加速

MyBatis 怎么在批量更新时返回受影响的行数

胖涛吖_9458

胖涛吖_9458

发布时间:2026-08-09 14:43:26

|

239人浏览过

|

来源于php中文网

原创

MyBatis批量更新默认不返回准确受影响行数,需同时配置JDBC的useAffectedRows=true和MyBatis执行器为SIMPLE或REUSE;推荐使用UpdateWrapper.in()单SQL方式,可精准返回真实变更行数。

mybatis 怎么在批量更新时返回受影响的行数

MyBatis 批量更新默认不返回准确受影响行数,主要受执行器类型和 JDBC 配置影响。要拿到真实更新条数,需从两个层面配合调整:JDBC 连接参数 + MyBatis 执行器配置。

关键原因:BATCH 执行器会丢失行数

MyBatis 默认使用 SIMPLE 执行器,但很多项目显式配置为 BATCH 以提升批量性能。而 BATCH 模式底层调用 Statement.addBatch() + executeBatch(),JDBC 规范规定此时 executeBatch() 返回的是每条语句的更新计数数组——但 MyBatis 的 update() 方法只返回一个整数,且在 BATCH 模式下常统一返回 -1 或被截断。

  • BATCH 模式适合高吞吐写入,但放弃行数反馈
  • 若业务强依赖“到底改了几行”,就不能用 BATCH 执行器
  • REUSE 和 SIMPLE 模式可正常返回影响行数

必须配置 JDBC 的 useAffectedRows=true

即使执行器设为 SIMPLE,MySQL 驱动默认返回的是“匹配行数”(matched rows),而非“真正变更的行数”(changed rows)。比如字段值本来就是 20,再 SET age=20,MySQL 默认返回 1(匹配),但业务通常想要的是 0(未变更)。

解决办法是在数据库连接 URL 中添加参数:

jdbc:mysql://host:3306/db?useAffectedRows=true
  • 该参数让 MySQL 驱动调用 mysql_affected_rows() 而非 mysql_info()
  • Oracle、PostgreSQL 等数据库无需此参数,原生支持返回变更行数
  • Spring Boot 中可在 application.yml 的 spring.datasource.url 后追加

两种推荐的批量更新方式及返回行为

方式一:用 UpdateWrapper.in() 单次 SQL 更新(推荐)

生成一条含 WHERE id IN (1,2,3) 的 UPDATE 语句,本质是单条 SQL,天然支持返回真实影响行数。

  • 代码简洁,事务安全,网络开销小
  • 返回值即实际被修改的记录数(如 3 条 ID 存在且字段值有变化,才返回 3)
  • 注意:null 字段默认不参与更新,需用 wrapper.setNull("col") 显式置空

方式二:用 updateBatchById()(慎用行数)

MyBatis-Plus 提供的该方法底层仍是循环执行单条 UPDATE,但受执行器影响大:

  • 若全局配置了 defaultExecutorType=BATCH,它仍可能返回 -1
  • 确保执行器为 SIMPLE 或 REUSE,且 JDBC 含 useAffectedRows=true,才能获得准确总数
  • 不适合超大批量(如 >1000 条),易触发 GC 或连接超时

验证是否生效的小技巧

执行一次批量更新后,打印返回值并手动查库比对:

  • 插入测试数据:INSERT INTO user(id, name, age) VALUES (1,'a',18), (2,'b',18), (3,'c',25);
  • 执行 UPDATE user SET age=18 WHERE id IN (1,2,3);
  • 正确配置下应返回 2(ID=1、2 的 age 原值非 18,被更新;ID=3 原值已是 18,不变更)
  • 若返回 3,说明 useAffectedRows=true 未生效
  • 若返回 -1,检查 defaultExecutorType 是否为 BATCH

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
mybatis一级缓存和二级缓存
mybatis一级缓存和二级缓存

在MyBatis中,一级缓存和二级缓存是两种不同级别的缓存机制,它们都可以用来提高性能。本专题提供mybatis一级缓存和二级缓存相关文章,大家可以免费阅读。

583

2023.08.21

ibatis和mybatis有什么区别
ibatis和mybatis有什么区别

ibatis和mybatis的区别:1、基本信息不同;2、开发时间不同;3、功能与易用性;4、配置文件;5、入参类型与出参类型;6、返回结果集接受方式;7、语法差异;8、数据库方言支持;9、插件支持;10、社区活跃度;11、全球化支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2502

2024.02.23

mybatis如何配置数据库连接
mybatis如何配置数据库连接

mybatis配置数据库连接的方法:1、指定数据源;2、配置事务管理器;3、配置类型处理器和映射器;4、使用环境元素;5、配置别名。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

446

2024.02.23

mybatis工作原理及流程是什么
mybatis工作原理及流程是什么

mybatis工作原理及流程:1、配置文件;2、接口与映射;3、sql解析与生成;4、执行计划;5、结果处理;6、动态sql;7、缓存机制;8、插件;9、事务管理;10、日志与监控;11、扩展性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

292

2024.02.23

hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

302

2024.02.23

Java MyBatis框架
Java MyBatis框架

本专题专注于Java主流ORM框架MyBatis的应用,系统讲解SQL映射、动态SQL、结果映射、分页查询、缓存机制与多表关联等核心内容,并结合企业管理系统、电商平台和后台管理项目实战,帮助学员全面掌握高效的数据库持久层开发技能。

5749

2025.08.26

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

0

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn