mybatis-plus 中 updateById()方法 更新不了null、空字符串解决策

本文介绍了在使用Mybatis-Plus时遇到的数据更新问题,即更新操作后数据回滚的情况。问题源于Mybatis-Plus的默认字段策略,该策略仅更新非空字段。为解决此问题,作者提供了在实体类中使用`@TableField`注解配合`FieldStrategy.IGNORED`的解决方案,并通过测试验证了其有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,前言,最近使用刚使用了下 mybatis-plus,给笔者的最大感受是确实提高生产力,特别是许多针对单表的操作不再需要去自己手动去一步步写实现了,实乃居家旅行之必备良品。然而今天晚上下班的时候笔者乐栽乐哉地修复一个bug时发现,我明明更新了一条记录,随后再去看时数据又回来了。吓得我感觉揉了揉我1.5度的卡姿兰大眼珠子,方法确实没写错啊!还反复验证了2次。咳咳,貌似跑题了,切回正轨。这是由于mybatis-plus 对字段的验证策略导致的,mybatis-plus默认进行了不是全量更新的策略,即 :

mybatis-plus:
  global-config:
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 1

二,解决策,笔者使用的版本是 2021 版比较新的 3.4.2,官网已经做了简化只需要在实体类中加上对应注解即可。

<!-- mybatis-plus -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.2</version>
</dependency>
@ApiModelProperty(value = "昵称")
@TableField(value = "nickname", updateStrategy = FieldStrategy.IGNORED)
private String nickname;

三,测试,成功

@Test
public void testUpdateNull(){
   UserInfo userInfo = new UserInfo();
   userInfo.setId(7l);
   userInfo.setName("yaya");
   userInfo.setPassword("123456");
   userInfo.setNickname(null);
   int result = userInfoMapper.updateById(userInfo);
   System.out.println(result);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值