MyBatis-Plus更新字段为null时,update语句为null字段不生效的解决方法
作者:小教学发布时间:2023-09-25分类:程序开发学习浏览:75
文章目录
- 1.异常说明:
- 2.原理:
- 3.解决办法:
- 1)修改MyBatis-Plus 全局默认策略
- 2)修改实体类注解,改变字段的忽略判断
- 4.字段策略全解
- 1)官方文档
- 2)字段策略介绍
- 1、FieldStrategy作用
- 2、FieldStrategy类型
- 3、FieldStrategy配置
- ① 全局策略配置
- ② 单字段策略配置
- 3)实战说明
- 1、忽略判断-IGNORED
1.异常说明:
mapper.updateById()时, set为null 未生效,其他字段更新。
puDeclareElements.setStatus(OrderEnum.DRAFTS.getType());
puDeclareElements.setSubmitBy(null);
puDeclareElementsService.updateById(puDeclareElements)
2.原理:
MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进了不是全量更新的策略,默认忽略为null 的字段的
3.解决办法:
1)修改MyBatis-Plus 全局默认策略
缺点
:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null
mybatis-plus:
global-config:
#字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
field-strategy: 0
2)修改实体类注解,改变字段的忽略判断
缺点
:需要注意数据库字段是否设置为 非null ,如果为非null 也更新不成功
@TableField( updateStrategy = FieldStrategy.IGNORED)
private Date settleTime;
4.字段策略全解
1)官方文档
Mybatis-Plus中FieldStrategy说明
: https://baomidou.com/pages/223848/#tableid
2)字段策略介绍
1、FieldStrategy作用
Mybatis-Plus字段策略FieldStrategy的作用主要是在进行新增、更新时,根据配置的策略判断是否对实体对象的值进行空值判断,如果策略为字段不能为空,则不会对为空的字段进行赋值或更新。
同样,在进行where条件查询时,根据whereStrategy策略判断是否对字段进行空值判断,如果策略为字段不能为空,则为空的字段不会作为查询条件组装到where条件中。
三个配置,对应三种使用场景
insertStrategy : 在insert操作时的字段策略,是否进行空值判断,插入空值
updateStrategy : 在update操作时的字段策略,是否进行空值判断,插入空值
whereStrategy : 在where条件组装时,是否进行控制判断,将空值作为查询条件
2、FieldStrategy类型
FieldStrategy的源码中,一共有5种策略类型
。
public enum FieldStrategy {
IGNORED,
NOT_NULL,
NOT_EMPTY,
DEFAULT,
NEVER;
private FieldStrategy() {
}
}
每种策略的作用
:
值 | 描述 |
---|---|
IGNORED | 忽略空值判断,实体对象的字段是什么值就用什么值更新,支持null值更新操作 |
NOT_NULL | 进行非NULL判断,也是默认策略,相当于age!=null |
NOT_EMPTY | 进行非空判断,主要是针对字符串类型,相当于name != null and name != ‘’ |
NEVER | 从不更新,不管字段是否有值,都不进行更新 |
DEFAULT | 追随全局配置 |
3、FieldStrategy配置
① 全局策略配置
在全局配置中,三者的默认值都是FieldStrategy.NOT_NULL,即进行空值判断,不对NULL值数据进行处理。
public DbConfig() {
this.idType = IdType.ASSIGN_ID;
this.tableUnderline = true;
this.capitalMode = false;
this.logicDeleteValue = "1";
this.logicNotDeleteValue = "0";
this.insertStrategy = FieldStrategy.NOT_NULL;
this.updateStrategy = FieldStrategy.NOT_NULL;
this.whereStrategy = FieldStrategy.NOT_NULL;
}
在spring boot中可以通过配置属性修改全局字段策略:
mybatis-plus.global-config.db-config.update-strategy=not_null
mybatis-plus.global-config.db-config.insert-strategy=not_null
mybatis-plus.global-config.db-config.where-strategy=not_null
② 单字段策略配置
在实体对象中,通过@TableField注解可以针对单个字段指定字段策略。
3)实战说明
1、忽略判断-IGNORED
@TableName(value ="user")
@Data
public class User implements Serializable {
@TableId
private Long id;
private String name;
private Integer age;
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String email;
}
再次执行上面的单元测试:
PS:后面就不一一举例了。可以看官网。写的很详细。
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 8Android广播如何解决Sending non-protected broadcast问题
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版