Mybatis-Plus中 updateById 无法将已有值的字段更新为 null

在 MyBatis-Plus 中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略。

1、调整全局策略(会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null)

mybatis-plus:
  global-config:
    db-config:
      insert-strategy: ignored  # "忽略判断", 所有字段都插入
      update-strategy: ignored  # "忽略判断", 所有字段都更新

insertStrategyupdateStrategy 属性的值有以下5种枚举类型:

  • ignored “忽略判断”, 所有字段都更新或插入
  • not_null “非 NULL 判断”, 只更新或插入非NULL值
  • not_empty “非空判断”, 只更新或插入非NULL值且非空字符串
  • default 如果字段的值不为null,则进行插入或者更新操作;如果字段的值为null,不执行操作,执行结果还是数据库原来的值或者默认值
  • never 永远不进行插入或更新操作,即使字段的值不为null

2、调整字段验证注解

在属性上注解

根据具体情况,在需要更新或者插入的字段中调整验证注解,如忽略判断,任何情况都进行插入和更新操作:

@TableField(updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)

3、使用 UpdateWrapper

 

UpdateWrapper<Entity> wrapper = new UpdateWrapper<>();
wrapper.eq("id", id)
       .set("field1", null)
       .set("field2", value2);
myService.update(wrapper);

 

posted @ 2024-05-15 14:42  唏嘘-  阅读(272)  评论(0编辑  收藏  举报