验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Mybatis-Plus将字段设置为null没起作用怎么解决

阅读:1398 来源:乙速云 作者:代码code

Mybatis-Plus将字段设置为null没起作用怎么解决

      项目场景:

      最近在做一个需求的时候需要把数据库中的某个字段设置为空

      问题描述:

      在代码中通过set方法对一个字段设置成null,发现并没有起作用

      原因分析:

      经过查询是因为Mybatis-Plus默认的更新策略设置的问题,Mybatis-Plus中FieldStrategy有三种策略:

      • IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null;

      • NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略"";

      • NOT_EMPTY:非空。为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库;

      默认的是NOT_NULL,也就是忽略null字段,所以更新不成功。

      解决方案:

      需对 FieldStrategy 策略进行调整,有如下三种方式:

      方式一:调整全局的验证策略,如下:

      mybatis-plus:
        mapper-locations: classpath:/mapper/**/*.xml
        typeAliasesPackage: com.test.application.test.admin.entity
        global-config:
          #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
          id-type: 0
          #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
          field-strategy: 0
          #驼峰下划线转换
          db-column-underline: true
          #刷新mapper 调试神器
          refresh-mapper: true
          #数据库大写下划线转换
          #capital-mode: true
        configuration:
          map-underscore-to-camel-case: true
          cache-enabled: true
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

      方式二:【推荐】调整字段验证注解

      Mybatis-Plus 版本3.1.2及以上,根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

      @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
      private String name;
      
      或者单个的例子:
      
      @TableField(updateStrategy = FieldStrategy.IGNORED)
      private String username;

      方式三:使用 UpdateWrapper (3.x)

      使用以下方法来进行更新或插入操作:

      //updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
      mapper.update(
        new User().setName("mp").setAge(3),
        Wrappers.lambdaUpdate()
                .set(User::getEmail, null) //把email设置成null
                .eq(User::getId, 2)
      );
      
      // 也可以参考下面这种写法
      mapper.update(
         null,
         Wrappers.lambdaUpdate()
            .set(User::getAge, 3)
            .set(User::getName, "mp")
            .set(User::getEmail, null) // 把email设置成null
            .eq(User::getId, 2)
      );
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>