使用一个工具类

import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;

import java.beans.PropertyDescriptor;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
 * 更新工具类(忽略为null的字段)
 */
public class UpdateUtil {

    /**
     * 所有为空值的属性都不copy
     * @param source
     * @param target
     */
    public static void copyNullProperties(Object source, Object target) {
        BeanUtils.copyProperties(source, target, getNullField(source));
    }

    /**
     * 获取属性中为空的字段
     *
     * @param target
     * @return
     */
    private static String[] getNullField(Object target) {
        BeanWrapper beanWrapper = new BeanWrapperImpl(target);
        PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors();
        Set<String> notNullFieldSet = new HashSet<>();
        if (propertyDescriptors.length > 0) {
            for (PropertyDescriptor p : propertyDescriptors) {
                String name = p.getName();
                Object value = beanWrapper.getPropertyValue(name);
                if (Objects.isNull(value)) {
                    notNullFieldSet.add(name);
                }
            }
        }
        String[] notNullField = new String[notNullFieldSet.size()];
        return notNullFieldSet.toArray(notNullField);
    }
}

然后先使用findone 或者 findbyid先查,使用查到的数据覆盖掉null值即可

 //新增and修改
    @Transactional
    public VegeGoods updateGoods(VegeGoods goods){
      VegeGoods oldvegegoods=vegeGoodsRes.getOne(goods.getId());
            if(StringUtils.isEmpty(oldvegegoods)){
                return  vegeGoodsRes.save(goods);
            }else{
                UpdateUtil.copyNullProperties(goods,oldvegegoods);
                return vegeGoodsRes.save(oldvegegoods);
            }
    }

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐