news 2026/4/18 5:43:40

MyBatis-Plus 中 update 和 updateById 的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis-Plus 中 update 和 updateById 的区别

在 MyBatis-Plus 中,updateupdateById都是用于更新数据的方法,但它们的用途和行为有显著区别:

1.updateById 方法

java

// 根据 ID 更新实体 boolean updateById(T entity);

特点:

  • 根据主键 ID进行更新

  • 实体对象必须包含主键值

  • 只会更新非 null 的字段

  • 更安全,避免误操作

示例:

java

User user = new User(); user.setId(1L); // 必须设置 ID user.setName("张三"); user.setAge(25); // 只更新 name 和 age 字段(email 为 null 则不更新) userService.updateById(user); // 生成的 SQL: // UPDATE user SET name='张三', age=25 WHERE id=1

2.update 方法

java

// 根据条件构造器更新 boolean update(T entity, Wrapper<T> updateWrapper);

特点:

  • 根据条件构造器进行更新

  • 可以批量更新多条记录

  • 需要明确指定更新条件,否则可能更新全表

  • 可以结合条件构造器进行复杂更新

示例:

java

// 示例1:条件更新 UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.eq("age", 18).set("status", 1); userService.update(new User(), wrapper); // 示例2:更新指定实体并带条件 User user = new User(); user.setName("李四"); UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.eq("age", 20); userService.update(user, wrapper);

3.主要区别对比

特性updateByIdupdate
更新依据主键 ID条件构造器
更新范围单条记录可单条或多条
安全性较高(必须有ID)较低(需注意条件)
使用场景精确更新单条记录批量更新或条件更新
空值处理null 值不更新可配置空值处理
灵活性较低较高

4.使用建议

使用 updateById 的场景:

java

// 1. 单条记录更新(知道ID) user.setId(userId); user.setUpdateTime(new Date()); userService.updateById(user); // 2. 从数据库查询后修改部分字段 User dbUser = userService.getById(id); dbUser.setStatus(2); userService.updateById(dbUser);

使用 update 的场景:

java

// 1. 批量更新 UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.set("status", 0) // 直接设置值 .in("id", idList); // 批量条件 userService.update(null, wrapper); // 2. 条件更新(不需要先查询) UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.eq("dept_id", deptId) .gt("age", 30) .set("level", "高级"); userService.update(null, wrapper); // 3. 递增/递减操作 UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.setSql("balance = balance + 100") // SQL表达式 .eq("id", userId); userService.update(null, wrapper);

5.注意事项

java

// ❌ 危险:没有条件的 update 会更新全表! userService.update(user, null); // 会更新所有记录! // ✅ 安全:始终确保有条件 UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.eq("id", userId); // 明确指定条件 userService.update(user, wrapper);

6.性能考虑

  • updateById:更适合单条记录更新,性能更好

  • update:适合批量操作,减少数据库交互次数

选择哪个方法取决于具体场景:

  • 按主键更新 →updateById

  • 按条件批量更新 →update

  • 复杂更新逻辑 →update+ 条件构造器

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 20:53:46

【异常】数据库“隐形”字符大揭秘:Navicat 中如何发现并批量清除换行符与制表符

在日常的 Java 开发与数据库维护中,我们经常遇到这样的场景:前端页面展示的数据格式乱了,或者在进行数据迁移、Excel 导出时,发现某些文本字段里混入了大量的“隐形炸弹”——看不见的换行符和制表符。 本文将复盘一次真实的数据清洗过程,教你如何在 Navicat 中让这些特殊…

作者头像 李华
网站建设 2026/4/7 8:12:53

新手怎么安全清理C盘,不损坏系统和重要数据?

theme: default themeName: 默认主题清理c盘对于电脑新手来说可能像走雷区一样,一个错误的操作就可能删除重要文件甚至损坏windows系统,本指南将展示安全简单的方法来释放空间,同时不危及你的文件或电脑稳定性,我们将重点介绍windows内置的工具和清晰的步骤,这些步骤不会触及你…

作者头像 李华
网站建设 2026/4/11 16:51:10

Deepoc具身模型开发板:重新定义机器人智能化的技术底座

引言&#xff1a;从"机械执行"到"智能涌现"的范式革命在机器人发展历程中&#xff0c;我们经历了从"遥控玩具"到"程序化执行"的阶段&#xff0c;但始终未能突破"智能缺位"的瓶颈。传统机器人虽然能够完成预设动作&#xff0…

作者头像 李华
网站建设 2026/4/2 21:26:12

基于django框架和python的农产品扶贫助农系统的开发与实现

目录农产品扶贫助农系统的开发与实现摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;农产品扶贫助农系统的开发与实现摘要 该系统基于Django框架与Python技术&#xff0c;旨在通…

作者头像 李华
网站建设 2026/4/15 9:32:15

仅凭文本就能劫持AI:无点击、无恶意软件,仅靠文字

仅凭文本就能劫持AI —— 无需点击&#xff0c;无需恶意软件&#xff0c;仅靠文字英国国家网络安全中心警告称&#xff0c;该漏洞可能永远无法被完全修复——因为它与语言模型读取文本的方式紧密相连。一位银行客户要求ChatGPT查询其账户余额。AI却返回了其他十七位客户的账户详…

作者头像 李华