欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用mybatis-plus想要修改某字段为null问题,

来源: javaer 分享于  点击 36396 次 点评:120

使用mybatis-plus想要修改某字段为null问题,


目录
  • mybatis-plus想要修改某字段为null
    • 问题场景
    • 原因
    • 解决办法
  • mybatis-plus更新字段为null不生效
    • 异常说明
    • 原理
    • 解决办法
  • 总结

    mybatis-plus想要修改某字段为null

    问题场景

    使用mybatis + mybatisPlus进行修改某字段,想要将其设为null, 但执行时没有成功。

    原因

    mybatis-plus会将所有为空的字段在修改时进行过滤,不进行设为空的修改操作。

    解决办法

    在相关字段上加上注解

    @TableField(strategy = FieldStrategy.IGNORED)

    例:

    @TableField(strategy = FieldStrategy.IGNORED)
    private Long classId;

    mybatis-plus更新字段为null不生效

    异常说明

    mapper.updateById()时,set为null未生效,其他字段更新

    periodRecordOriginal.setSettleTime(null);
    periodRecordOriginal.setActualSettleTime(null);
    periodRecordOriginal.setSettleStatus(0);
    int i = periodRecordMapper.updateById(periodRecordOriginal);

    原理

    MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进⾏了不是全量更新的策略,默认忽略为null 的字段的

    解决办法

    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;

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • Mybatis-Plus使用updateById()、update()将字段更新为null
    • mybatis-plus更新字段为null的处理方式
    • mybatis plus更新字段为null处理方法
    相关栏目:

    用户点评