当前位置: 代码网 > it编程>编程语言>Java > mybatisplus按条件修改实体单个字段实现方式

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

2026年04月24日 Java 我要评论
mybatisplus按条件修改实体单个字段在 mybatis-plus 中,按条件修改单个字段(而不是整条记录),不要使用 updatebyid() 或传入实体对象的方式,而应使用 updatewr

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。

常见错误(务必避免)

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com