当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2023-03-17
目录 mybatis-plus想要修改某字段为null 问题场景 原因 解决办法 mybatis-plus更新字段为null不生效 异常说明 原理 解决办法 总结 mybatis-plus想要修改某字段为null 问题场景 使用mybatis + mybatisP
目录
  • 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;

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    上一篇:java开发非公平锁不可打断源码示例解析
    下一篇:没有了
    网友评论