mybatis-plus学习记录-更新值为null的字段无效

mybatis-plus学习记录-更新值为null的字段无效

在使用mybatis-plus所生成的saveOrUpdate方法的时候,有些字段需要更新为空值。但是mybatis-plus默认的策略是NOT_NULL,如果为空则不更新该字段。
解决方案:
1.在字段上使用@TableField注解,设置updateStrategy属性为FieldStrategy.IGNORED。
插入同理使用insertStrategy属性。但是这种做法有一定的危险性,所以不推荐。

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String phone;

FieldStrategy 说明

public enum FieldStrategy {
    /**
     * 忽略判断
     */
    IGNORED,
    /**
     * 非NULL判断
     */
    NOT_NULL,
    /**
     * 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
     */
    NOT_EMPTY,
    /**
     * 默认的,一般只用于注解里
     * <p>1. 在全局里代表 NOT_NULL</p>
     * <p>2. 在注解里代表 跟随全局</p>
     */
    DEFAULT,
    /**
     * 不加入 SQL
     */
    NEVER
}

2.使用LambdaUpdateWrapper。这样一来业务层就多了很多冗余代码了。需要注意的是使用了UpdateWrapper之后,实体类中的主键就失效了,需要通过UpdateWrapper的eq()方法去设置主键,否则会把记录全都更新了。

AccountInfo accountInfo = new AccountInfo(accountInfoVo.getId(),accountInfoVo.getNickName(),accountInfoVo.getEmail(),accountInfoVo.getPhone(),accountInfoVo.getHeadImg(),accountInfoVo.getBirthday(),accountInfoVo.getNote(),account.getId());
LambdaUpdateWrapper<AccountInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(AccountInfo::getBirthday,accountInfoVo.getBirthday());
updateWrapper.set(AccountInfo::getEmail,accountInfoVo.getEmail());
updateWrapper.set(AccountInfo::getHeadImg,accountInfoVo.getHeadImg());
updateWrapper.set(AccountInfo::getNickName,accountInfoVo.getNickName());
updateWrapper.set(AccountInfo::getPhone,accountInfoVo.getPhone());
updateWrapper.set(AccountInfo::getNote,accountInfoVo.getNote());
updateWrapper.eq(AccountInfo::getId,accountInfoVo.getId());//千万别忘了设置主键
accountInfoService.saveOrUpdate(accountInfo,updateWrapper);
accountVo.getAccountInfo().setId(accountInfo.getId());

3.自己写mapper.xml,自己想怎么样就怎么样。业务层代码看起来会比较整洁

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值