场景:项目整合了mybatisplus,进行update更新,前端传值为空时,数据库也进行了更新
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("shop_id", goodsInfo.getShopId());
updateWrapper.eq("goods_id", goodsInfo.getGoodsId());
//获取修改之前的数据
Map oldValue = iShopGoodsService.getOneOfShopGoods(goodsInfo);
boolean update = iShopGoodsService.update(goodsInfo, updateWrapper);
Map newValue = iShopGoodsService.getOneOfShopGoods(goodsInfo);
//记录操作日志
解决方案:
在实体类上使用@TableField注解
/**
* 是否限量商品 -1不限量商品,其他数值指定限量几件
*/
@TableField(strategy = FieldStrategy.NOT_EMPTY)
private String limitGoods;
这样,当前端传过来的limitGoods参数为null或者空字符串,mybatisplus的更新就会拦截此字符串的更新。
FieldStrategy的源码中,一共有4种策略类型。
package com.baomidou.mybatisplus.annotation;
/**
* 字段策略枚举类
*
* @author hubin
* @since 2016-09-09
*/
public enum FieldStrategy {
/**
* 忽略判断
*/
IGNORED,
/**
* 非NULL判断
*/
NOT_NULL,
/**
* 非空判断
*/
NOT_EMPTY,
/**
* 默认的,一般只用于注解里
* <p>1. 在全局里代表 NOT_NULL</p>
* <p>2. 在注解里代表 跟随全局</p>
*/
DEFAULT
}
![](https://i-blog.csdnimg.cn/blog_migrate/85942338a3766efc81a4c3f3e1e97dfd.png)
附上mybatis-plus官网链接地址:
https://baomidou.com/pages/223848/#fieldstrategy
有兴趣的小伙伴可以点击看看