news 2026/4/15 13:19:51

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/4/13 2:25:49

芯片制造企业如何利用CKEDITOR+C#.NET实现CAD图纸转存?

CMS企业官网编辑器功能扩展开发记录&#xff08;PHP版&#xff09; 一、需求分析与技术评估 作为独立PHP开发者&#xff0c;我接到了一个企业官网CMS系统的功能扩展需求&#xff0c;需要在现有CKEditor4编辑器中增加Word/Excel/PPT/PDF导入和一键粘贴功能&#xff0c;预算严格…

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

关于大模型部署:看这篇就对了

前言 大模型从训练完成到真正对外提供服务&#xff0c;部署是中间的关键桥梁。部署的核心目标很明确&#xff1a;让模型在特定硬件环境下&#xff0c;以低延迟、高吞吐量、高稳定性的状态&#xff0c;响应各类输入请求。这不是简单的“加载模型运行”&#xff0c;而是一个涉及环…

作者头像 李华
网站建设 2026/4/12 19:09:31

王阳明:清除人生的三种“土匪”

《心学攻略&#xff1a;王阳明给现代人的“人生重构”系统》 2/24第02讲 | 核心隐喻&#xff1a;我们要打的三种“土匪”——人生阻力拆解&#xff1a;为什么你总在“打地鼠”&#xff0c;却永远清不完问题&#xff1f;三重围城&#xff1a;现代人的“土匪”阻力地图你有没有觉…

作者头像 李华
网站建设 2026/4/12 20:34:22

AiScholar艾思科蓝2025年度答卷:聚焦“四化”战略,驱动创新发展

2025年&#xff0c;AiScholar艾思科蓝立足“科研领域的连接者”&#xff0c;秉承“合法&#xff0c;诚信&#xff0c;透明&#xff0c;善意”的学术服务准则&#xff0c;以品牌化树立标杆、以国际化拓展边界、以专业化筑牢根基、以智能化驱动革新&#xff0c;在全球学术生态中持…

作者头像 李华