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

工作实战总结与实现-mybatis-plus更新策略部分字段不更新问题

文章目录

  • 案例场景
  • 存在问题
  • 解决方案一
  • 解决方案二
  • 继续延伸

请添加图片描述

案例场景

很简单的工作场景,需要将数据库某个表的字段设置为null或者空字符串,使用mybatis-plus的update语句,如下:

	order.setPassCode(null);reservationOrderManger.updateById(order);

很自然的认为会更新成功,然后bug已经悄然而来,发现并没有更新成功,why??

存在问题

虽然我们的建表语句并没有对该字段进行非空限制,现在仅仅是希望把它更新为null,结果不成功。检查一下JavaBean,乍一看好像也没啥问题,其实Mybatis-Plus有一个更新策略FieldStrategy,默认是DEFAULT,在更新字段的时候,如果字段的值为null,就不会拼接到sql语句中,问题就出在这,因此我们需要手动调整更新策略。

@Data
public class XXXEntity{/*** 门禁通行码.*/@TableField(value = "pass_code")private String passCode;
}CREATE TABLE public.reservation_order (id uuid NOT NULL, -- 主键pass_code varchar(50) NULL, -- 通行码CONSTRAINT reservation_order_pkey PRIMARY KEY (id)
);

解决方案一

public class XXXEntity{/*** 门禁通行码.*/@TableField(value = "pass_code", updateStrategy = FieldStrategy.IGNORED)private String passCode;
}

五大策略

public enum FieldStrategy {// 不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null IGNORED,// 也是默认策略,也就是忽略null的字段,不忽略""NOT_NULL,// 为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库NOT_EMPTY,// 同NOT_NULLDEFAULT,// 一经插入 永不更新 (etc:createTime)NEVER;private FieldStrategy() {}
}

解决方案二

设置全局的field-strategy(默认追随全局配置)
mybatis-plus:globalConfig:dbConfig:update-strategy: ignored
这样做是全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。

继续延伸

在mybatis-plus中,不仅仅有更新策略,还有插入策略、查询策略,默认也是如果字段值为空不进行插入、查询,当然也可以自定义不同策略

public @interface TableField {String value() default "";boolean exist() default true;String condition() default "";String update() default "";FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;
}// 使用方法
mybatis-plus:globalConfig:dbConfig:logicDeleteValue: "11"logicNotDeleteValue: "1"logicDeleteField: "model_status"update-strategy: ignoredwhere-strategy: ignoredinsert-strategy: ignored// 使用方法
@TableName("reservation_order")
public class XXXEntity {/*** 门禁通行码.*/@TableField(value = "pass_code", updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED, whereStrategy = FieldStrategy.IGNORED)private String passCode;
}
http://www.lryc.cn/news/498773.html

相关文章:

  • MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标
  • Midjourney Describe API 的对接和使用
  • 《单片机原理及接口技术》(C51编程)(第三版)------张毅刚主编
  • Qt入门9——绘图
  • FreeRTOS之ARM CR5栈结构操作示意图
  • Java线程的interrupt中断、wait-notify/all(源码级分析)
  • 计网408考点讲解
  • 当linux可执行文件缺少或者不兼容so库时候,如何查看版本以及缺少那些库
  • 文件下载的几种方式
  • 车联网安全学习之TBOX
  • 访问http网页强制跳转到了https的解决办法
  • 3D 生成重建016-SA3D从nerf中分割一切
  • 阿里云整理(二)
  • qt基本部分控件用法(一)
  • 【Linux】环境ChatGLM-4-9B 模型之 openai API 服务
  • Too many open files 问题处理
  • CentOS 7 环境下常见的操作和配置
  • HTTP(超文本传输协议)
  • etcd-v3.5release-(3)-readIndexRead
  • IPv6 NA RTR/SOL/OVR标志位,单播多播选择,ndppd代理和kernel配置
  • C语言程序设计P5-4【应用函数进行程序设计 | 第四节】——知识要点:数组作函数参数
  • PostgreSQL数据库连接:psqlODBC驱动安装与配置实战指南
  • 【NLP 8、normalization归一化函数:sigmoid、softmax】
  • 鸿蒙ArkTS 与安卓Android-底层逻辑对比
  • 第八节、Bresenham直线插补【51单片机-TB6600驱动器-步进电机教程】
  • 唇形同步视频生成工具:Wav2Lip
  • 旅游管理系统的设计与实现
  • burp常用机漏洞测试理论
  • TCP/IP 和 UDP
  • FastAPI解决跨域报错net::ERR_FAILED 200 (OK)