当前位置: 首页 > news >正文

Mybatisplus 如何将已经有值的字段设置为空值null

终极推荐方式:
        UpdateWrapper<SkuDO> wrapper = new UpdateWrapper<>();wrapper.lambda().set(Objects.isNull(dto.getWeights()), SkuDO::getWeights, null).set(Objects.isNull(dto.getShelfLife()), SkuDO::getShelfLife, null).eq(PurchaseSkuDO::getId, dto.getId()).eq(SkuDO::getIsDeleted, DeletedEnum.NORMAL.getCode());int update = this.getBaseMapper().update(skuDO, wrapper);
                LambdaUpdateWrapper<SpuDO> lambdaUpdate = new LambdaUpdateWrapper<>();lambdaUpdate.set(Objects.isNull(spuDO.getProvinceCode()),SpuDO::getProvinceCode, null);lambdaUpdate.set(Objects.isNull(spuDO.getProvinceName()),SpuDO::getProvinceName, null);lambdaUpdate.eq(SpuDO::getId, spuDO.getId());spuDao.update(spuDO, lambdaUpdate);

上面两种写法,其实是一种写法。都非常的推荐。本质就是显示设置需要更新为null的字段。亲测有效,无坑。

错误使用方式分析:

  1. 为何直接使用:spuDao.updateById(spuDO)、spuDao.saveOrUpdate(spuDO)不行:这个问题的核心原因是:MyBatis-Plus 的 saveOrUpdate updateById 方法(底层依赖 BaseMapper)在执行更新操作时,默认会忽略 null 值字段,只更新非 null 的属性。
  2. 为何使用下面对的方式也不行:原因是MyBatis-Plus 中 update(T entity, Wrapper<T> wrapper) 的字段过滤规则是:无论是否 “显式赋值 null”,只要字段策略是 NOT_NULL(默认),都会过滤所有 null 字段—— 它不会区分 “主动设为 null” 和 “未赋值 null”,只要值是 null,就不加入 SET 子句。

    // 1. 构建 spuDo:需要更新的字段(包括要设为 null 的字段)直接设为 null,其他字段设为目标值
    SpuDO spuDo = new SpuDO();
    spuDo.setId(1L); // 主键(必须有,用于匹配要更新的记录)
    spuDo.setName(null); // 要更新为 null 的字段
    spuDo.setPrice(new BigDecimal("5999")); // 要更新的非 null 字段
    spuDo.setStatus(1); // 其他需要更新的字段// 2. 构建 LambdaUpdateWrapper:仅保留 where 条件(不写 set 方法)
    LambdaUpdateWrapper<SpuDO> lambdaUpdate = new LambdaUpdateWrapper<>();
    lambdaUpdate.eq(SpuDO::getId, spuDo.getId()); // 唯一条件:匹配 id = ?(也可加其他条件)// 3. 执行更新:spuDo 传非 null,lambdaUpdate 仅含 where 条件
    spuDao.update(spuDo, lambdaUpdate);
  3. @TableField(updateStrategy = IGNORED) 这种方式可以。但是非常非常不建议使用:使用 @TableField(updateStrategy = IGNORED) 确实能解决 “null 字段无法更新” 的问题,但它会改变字段的默认更新行为,如果不注意业务场景,容易踩坑,核心风险是 “误覆盖数据库已有值

 

http://www.zskr.cn/news/39942.html

相关文章:

  • 2025 年上海商用净水器租赁公司最新推荐榜,技术实力与市场口碑深度解析,助力精准选品工厂,事业单位,办公净水器租赁企业
  • 2025年尼龙拉链供货厂家权威推荐榜单:树脂拉链/金属拉链/隐形拉链源头厂家精选
  • 详细介绍:MySQL主从复制:数据同步实战指南
  • wzy
  • 分享一个自动化进行Oracle 重做日志组管理的脚本
  • 强化学习值函数与策略搜索两种方法对比和疑问解读
  • 2025qwb 线上赛wp
  • 深入解析:探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类
  • 2025年乐博智家保鲜盒直销厂家权威推荐榜单:乐博智家冰沙杯/乐博智家炒冰机/乐博智家刨冰机源头厂家精选
  • 2025年注射成型烧结炉生产厂商新排行榜,碳化硅反应烧结炉厂家推荐
  • 2025 年清洗机源头厂家最新推荐排行榜:聚焦激光与超声波等类型设备,解析七大优质企业实力
  • 训练现象
  • 2025年口碑好的P84针刺毡除尘滤袋公司、PTFE除尘滤袋源头厂家推荐
  • 2025年外资公司注册服务机构TOP排行榜推荐
  • 2025年宾馆布草实力厂家年度排行榜,宾馆布草生产商推荐
  • 运营商数据治理新范式:AI大模型赋能的低成本场景适配分类分级系统
  • 2025 年 11 月财税合规全案设计服务商推荐榜单:专业财税合规,税务筹划,全流程合规设计方案公司精选
  • 2025年双开拍门批发厂家权威推荐榜单:双侧翻拍门/铸铁拍门/方拍门源头厂家精选
  • Oracle AWR管理与快照操作完整指南
  • TensorFlow深度学习实战(39)——机器学习实践指南 - 指南
  • Oracle 数据库性能追踪与数据整合实践指南
  • 2025年采沙船优质厂家权威推荐榜单:挖沙船/射吸式抽沙船/抽沙船设备源头厂家精选
  • 2025 年 11 月插入式密度计,音叉密度计,直管密度计,在线密度计厂家最新推荐,聚焦高性能与可靠性兼具的优质品牌
  • 详细介绍:⸢ 柒-Ⅱ⸥ ⤳ 可信纵深防御建设方案:应用可信网络可信
  • 一个BFS的trick
  • 2025 年 11 月股权设计财税合规公司推荐排行榜,股权架构设计,财税合规方案,企业股权激励,税务筹划公司推荐
  • RCE漏洞基础以及绕过
  • 详细介绍:数据结构:树
  • 关于嵌入式硬件需要了解的基础知识 - 教程
  • 从零到一:我的开源AI商业化实战之路