一、原因
Mybatis-plus的字段策略(FieldStrategy)有三种策略:
- IGNORED:0 忽略
- NOT_NULL:1 非 NULL,默认策略
- NOT_EMPTY:2 非空
而默认的更新策略是NOT_NULL:非NULL; 即通过接口更新数据时数据为NULL值时将不更新进数据库。
二、解决办法
-
直接使用SQL(不过既然都使用Mybatis-plus了,大家应该不会用这个方法)
-
yaml配置文件中修改全局策略(我没测试过)且该方式在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,不推荐使用
mybatis-plus:
global-config:
#字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
field-strategy: 0
```java
- 在要忽略的字段上添加注解的方式
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String contractCode;
4. UpdateWrapper方式更新
```java
User user=userService.lambdaQuery().eq(User::getUserId,userId).one();
if(user!=null){
userService.update(user,new UpdateWrapper<User>().lambda()
.set(User::getUserName,null)
.eq(User::getUserId,user.getUserId()));
}