java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatisplus按条件修改实体单个字段

mybatisplus按条件修改实体单个字段实现方式

作者:qq_36608622

在MyBatis-Plus中,可以使用UpdateWrapper/LambdaUpdateWrapper按条件修改实体单个字段,推荐使用LambdaUpdateWrapper,它具有类型安全、清晰、高效等优点,避免使用updateById()或传入实体对象的方式,通过示例展示如何正确使用UpdateWrapper进行单个字段的更新

mybatisplus按条件修改实体单个字段

在 MyBatis-Plus 中,按条件修改单个字段(而不是整条记录),不要使用 updateById() 或传入实体对象的方式,而应使用 UpdateWrapper / LambdaUpdateWrapper 显式指定要更新的字段和条件。

推荐方式

使用 LambdaUpdateWrapper(类型安全、清晰、高效)

场景示例

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

// 方式1:通过 Service 调用(推荐)
boolean success = userService.update(
    Wrappers.<User>lambdaUpdate()
        .set(User::getStatus, "ACTIVE")   // 只更新 status 字段
        .eq(User::getId, 1001)            // WHERE 条件:id = 1001
);


// 生成的 SQL:
UPDATE user SET status = 'ACTIVE' WHERE id = 1001;

其他常见用法

// 1. 多条件 + 单字段更新
userService.update(
    Wrappers.<User>lambdaUpdate()
        .set(User::getStatus, "INACTIVE")
        .eq(User::getAge, 18)
        .likeRight(User::getName, "张")  // name LIKE '张%'
        .gt(User::getCreateTime, LocalDateTime.now().minusDays(7))
);


// 2. 使用 SQL 表达式(如自增、函数),setSql() 是直接拼接 SQL,确保值安全(避免 SQL 注入)。    
// status = status + 1(适用于数值字段)
userService.update(
    Wrappers.<User>lambdaUpdate()
        .setSql("login_count = login_count + 1")  // 注意:用 setSql()
        .eq(User::getId, 1001)
);


// 3. 仅使用 Mapper(不通过 Service)
@Autowired
private UserMapper userMapper;

userMapper.update(null, 
    Wrappers.<User>lambdaUpdate()
        .set(User::getStatus, "LOCKED")
        .eq(User::getUsername, "admin")
);
// 第一个参数传 null,表示不使用实体对象,完全依赖 Wrapper。

常见错误(务必避免)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文