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。常见错误(务必避免)

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论