mybatisplus 更新方法
时间: 2025-05-06 17:26:56 浏览: 33
### MyBatisPlus 更新方法使用教程
#### 1. 理解更新操作的基础概念
MyBatis-Plus 提供了多种方式来执行数据库记录的更新操作。这些功能不仅简化了开发者的工作量,还增强了代码的安全性和可读性[^1]。
#### 2. 使用 `updateById` 方法进行单条数据更新
对于简单的场景下,如果只需要根据主键 ID 来更新某一条特定的数据,则可以采用 `updateById` 方法:
```java
boolean result = userMapper.updateById(user);
if (result){
System.out.println("Update success");
} else {
System.out.println("Update failed");
}
```
此段代码展示了如何通过传递一个包含了新属性值的对象给 `updateById` 函数来进行单一实体对象的信息修改[^4]。
#### 3. 利用 Wrapper 实现复杂条件下的批量更新
当面对更复杂的业务逻辑需求时——比如依据多个字段组合成的查询条件去匹配多条目标记录并一次性完成它们的状态变更或其他信息更改的任务——此时就可以借助于 LambdaQueryWrapper 或 QueryWrapper 类构建动态 SQL 表达式,并调用通用 Mapper 接口所提供的 update 方法实现目的:
```java
// 创建Lambda表达式的封装器实例
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(User::getAge, age).set(User::getName, name);
int rowsAffected = userService.update(null, wrapper); // 参数一传null表示不指定要更新的具体列,默认全部更新
System.out.printf("%d records have been updated.", rowsAffected);
```
上述例子中,先定义了一个用于描述待处理数据特征(即筛选标准)以及期望设置的新值之间的映射关系;之后再将其作为参数提交给 service 层提供的 update API 完成交互过程。
#### 4. 自动填充与乐观锁机制的应用
为了进一步提升系统的健壮性和用户体验,在设计表结构之初就应该考虑加入创建时间和最后修改时间戳这样的元数据字段以便追踪每笔交易的发生时刻;与此同时还可以引入版本号 column 支持所谓的“乐观锁定”,防止并发冲突造成脏写入现象发生。具体做法是在 entity class 中声明相应 getter/setter pair 并标注 @TableField 注解指明其特殊用途即可[^3]。
```java
@TableLogic
private Integer deleted; // 软删除标记位
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
```
以上配置使得每次触发 insert/update 操作之前框架都会自动帮我们维护好这两个额外的时间戳信息,而带有 @Version 标记的那个整型变量则会在事务提交前被用来做 CAS(check-and-set)校验确保当前正在改动的那一行确实是从自己最后一次读取以来未曾发生变化过。
阅读全文
相关推荐


















