news 2026/3/29 6:29:10

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/27 1:00:51

不用再写Mock了!AI自动生成符合业务逻辑的API响应

第一章&#xff1a;传统Mock技术的桎梏 1.1 维护成本黑洞 案例举证&#xff1a;某银行支付系统迭代中&#xff0c;300接口Mock数据需4人日/周维护 版本滞后陷阱&#xff1a;电商促销规则变更导致30%Mock响应与生产环境偏离 边界覆盖缺陷&#xff1a;物流接口异常状态模拟不足…

作者头像 李华
网站建设 2026/3/26 11:01:40

一文读懂SCI、SSCI、SCIE、ESCI的区别

很多刚接触SCI的人可能会混淆SCI、SSCI、SCIE、ESCI这几个词。其实他们都是Web of Science&#xff08;WOS&#xff09;收录的子集。收录在这几个索引工具下的期刊会被视为科技领域的权威期刊。 那如果想要发表论文&#xff0c;是不是可以每一个索引工具下的期刊都可以选呢 其…

作者头像 李华
网站建设 2026/3/27 14:04:43

7.5 个性化插件开发:扩展AI工具的功能边界

7.5 个性化插件开发:扩展AI工具的功能边界 在AI工具日益普及的今天,大多数现成的AI平台和应用都提供了丰富的基础功能,但往往无法完全满足特定用户或企业的个性化需求。通过插件开发,我们可以扩展AI工具的功能边界,为其添加特定领域的专业能力、集成企业内部系统、实现定…

作者头像 李华
网站建设 2026/3/27 3:48:01

《危险边缘》:量子噪声导致AI医疗诊断集体失真事件

第一章 事件还原&#xff1a;量子噪声如何颠覆诊断系统 1.1 事故技术剖面 时空背景&#xff1a;2025年Q3某量子计算实验室1.2公里范围内 受影响系统&#xff1a;7家医院的CT影像AI辅助诊断平台 故障表现&#xff1a; ▶ 乳腺钼靶检查假阴性率上升47% ▶ PET-CT代谢活性分析出…

作者头像 李华
网站建设 2026/3/27 7:54:10

中国大模型暗战:阿里通义2.0的伦理后门测试报告

一、行业背景与测试必要性 随着国产大模型进入“千模大战”白热化阶段&#xff0c;阿里通义2.0凭借多模态能力跃居第一梯队。据工信部《2025大模型安全白皮书》显示&#xff1a; 头部模型参数年均增长400%&#xff0c;伦理漏洞触发率同比上升220% 后门攻击成本下降至$5000&am…

作者头像 李华