一、原因

Mybatis-plus的字段策略(FieldStrategy)有三种策略:

  1. IGNORED:0 忽略
  2. NOT_NULL:1 非 NULL,默认策略
  3. NOT_EMPTY:2 非空
    而默认的更新策略是NOT_NULL:非NULL; 即通过接口更新数据时数据为NULL值时将不更新进数据库。

二、解决办法

  1. 直接使用SQL(不过既然都使用Mybatis-plus了,大家应该不会用这个方法)

  2. yaml配置文件中修改全局策略(我没测试过)且该方式在更新时会忽略对所有字段的判断。但是如果一些字段没有传值过来,会被直接更新为null,不推荐使用

mybatis-plus:
  global-config:
    #字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
    field-strategy: 0
```java
  1. 在要忽略的字段上添加注解的方式
@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()));
}