news 2026/3/26 1:48:46

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/24 7:51:51

全平台兼容·一触即发,新一代AI直播场控系统,实现全平台高效管理

温馨提示&#xff1a;文末有资源获取方式面对多平台并存的直播生态&#xff0c;主播们常常疲于在不同软件间切换&#xff0c;难以形成统一的互动风格与运营策略。我们专为应对这一挑战&#xff0c;设计出全新一代AI自动场控机器人源码系统。本系统的核心理念在于“聚合”与“统…

作者头像 李华
网站建设 2026/3/23 10:21:13

Java版LeetCode热题100之「两两交换链表中的节点」详解

Java版LeetCode热题100之「两两交换链表中的节点」详解 本文约9200字&#xff0c;全面深入剖析 LeetCode 第24题《两两交换链表中的节点》。涵盖题目解析、递归与迭代两种解法、复杂度分析、面试高频问答、实际开发应用场景、相关题目推荐等&#xff0c;助你彻底掌握链表操作核…

作者头像 李华
网站建设 2026/3/23 3:33:18

基于SpringBoot的瑜伽馆管理系统毕设

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在开发一套基于SpringBoot框架的瑜伽馆管理系统&#xff0c;以实现瑜伽馆日常运营管理的自动化、高效化和智能化。具体研究目的如下&#xff1a;提高瑜伽…

作者头像 李华
网站建设 2026/3/25 1:01:25

7.2 私有AI助手部署指南:Dify打造企业级知识问答平台

7.2 私有AI助手部署指南:Dify打造企业级知识问答平台 在企业数字化转型过程中,知识管理和智能问答系统已成为提升组织效率和竞争力的关键工具。然而,许多企业对于将敏感数据和内部知识上传到第三方平台存在安全顾虑,同时也有定制化和控制权方面的需求。私有化部署的AI助手…

作者头像 李华
网站建设 2026/3/23 23:24:54

7.3 自动化工作流设计:构建个人专属的AI助理

7.3 自动化工作流设计:构建个人专属的AI助理 在日常工作和生活中,我们经常需要执行重复性的任务,如数据整理、信息收集、邮件处理、日程安排等。这些任务虽然不复杂,但耗时且容易出错。随着AI技术的发展,我们可以通过设计自动化工作流,让AI助理帮助我们完成这些重复性工…

作者头像 李华
网站建设 2026/3/25 16:12:42

7.4 API集成实战:连接不同平台实现数据互通

7.4 API集成实战:连接不同平台实现数据互通 在当今的数字化时代,企业和个人使用的应用程序和服务越来越多,从项目管理工具到社交媒体平台,从云存储服务到数据分析工具。这些系统各自存储着有价值的数据和功能,但往往相互独立,形成信息孤岛。API(Application Programmin…

作者头像 李华