mybatis-plus更新数据库字段为null

背景

在项目过程中,信息的录入有个需要是有联动效果的,比如,录入用户信息时,如果性别选择女,则需要填入是否生育,如果是男,则没有。如果有用户先选择了性别女,录入了已经生育字段信息,然后又把性别改成了男,这样数据库的字段就会变成,性别男,已生育这样的奇怪组合,因此,需要把是否生育字段的值改成空值,当然以上例子并不十分准确,但是类似的场景比比皆是。

 

问题

项目使用的持久层框架是mybatis-plus,正常来说mybatis-plus是有空值判断,如果更新的对象(比如UserDO)中某个值为空,mybatis-plus会认为该值不需要更新,而不是把它更新为空。

 

解决方法

  • 使用注解

在需要更新的字段上面加上注解@TableField(strategy = FieldStrategy.IGNORED),这样mybatis-plus就会在当前字段为空值时,更新为null,这样处理方式比较简单,全局有效,但是引起的问题,如果在某次更新中确实是不用更新该字段,所有并没有给该字段赋值,而不是想把它更新为null,但是mybatis-plus依然会把它更新为null,应对的方式有两种,一是使用自定义的更新语句,一是每次更新时,从数据库查询出原信息,然后set需要更新的新值,但是在多人团队中,是很难保证这点的。

  • 使用UpdateWrapper条件构造器

官网对于UpdateWrapper的讲述如下,个人感觉不是很详细,作了部分补,见图2。

    

当需要更新的字段比较少时,userMapper.update(userDO, updateWrapper)可以直接传userMapper.update(null, updateWrapper);将需要更新的字段通过updateWrapper的set类设置,updateWrapper的eq后面的字段为本次更新的条件。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值