mybatis-plus更新字段的时候设置为null,忽略实体null判断

朱雀 2023-10-05 18:25 99阅读 0赞

1 问题

在用mybatis-plus封装的updateById方法来更新数据时,想把一个字段设置为null值,但是发现更新后数据没有为null还是原来的值,这是因为mybatis-plus在更新的时候做了null判断,默认不更新为null的传参。

2 解决方法

1.将这个字段设置为空可以更新

在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断,例如

  1. @TableField(strategy = FieldStrategy.IGNORED)
  2. private String name;

当@TableField注解有多个值时

  1. @TableField(value = "user_name", strategy = FieldStrategy.IGNORED)
  2. private String userName;

附:

2018122909414113.png

2. 我们将全局更新策略设置为空可以更新

这两种方式都是我极力不推荐的,大家也尽量不要使用这两种方法,真的非常危险,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为null 了。

这里推荐一种方法,也是官网给出的,但是必须要求mp的版本 大于3, 如果是3以下的版本没有这个功能,就是使用UpdateWrapper.

比如,我们想把 user表中的gender设置为空:

  1. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  2. wrapper.set(User::getGender(), null);
  3. wrapper.eq(User::getId(), 1);
  4. userService.update(wrapper);

通过UpdateWrapper 可以设置null.

官网说明:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xzcWluZ2Zlbmc_size_16_color_FFFFFF_t_70

地址: https://mp.baomidou.com/guide/faq.html#%E6%8F%92%E5%85%A5%E6%88%96%E6%9B%B4%E6%96%B0%E7%9A%84%E5%AD%97%E6%AE%B5%E6%9C%89-%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2-%E6%88%96%E8%80%85-null

参考:https://blog.csdn.net/qq_39403545/article/details/85334250

参考:https://blog.csdn.net/lsqingfeng/article/details/106411954

发表评论

表情:
评论列表 (有 0 条评论,99人围观)

还没有评论,来说两句吧...

相关阅读