数据拷贝非空字段的方法

Spring本身自带BeanUtils的复制方法,观察源代码可知是用反射方法获取对应字段名称后拷贝对应数据,也存在可自定义去掉空值字段的传递参数

 但实际上如果一个实体类中字段过多,要一个一个传递这些空值字段名会显得数据过多,同样也能在复制前先用反射的方法来获取复制源的实体类中空值的字段,再传入这个方法中避免复制空值字段

 public static String[] getNullPropertyNames (Object source) {
        final BeanWrapper src = new BeanWrapperImpl(source);
        java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();

        Set<String> emptyNames = new HashSet<String>();
        for(java.beans.PropertyDescriptor pd : pds) {
            Object srcValue = src.getPropertyValue(pd.getName());
            if (srcValue == null) emptyNames.add(pd.getName());
        }
        String[] result = new String[emptyNames.size()];
        return emptyNames.toArray(result);
    }

    public static void copyPropertiesIgnoreNull2(Object src, Object target) {
        BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
    }

主要考虑存在空值传递问题,这里改用hutool中的BeanUtil方法类复制

这里用到的依赖包hutool

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.4</version>
        </dependency>

观察源码可知,方法和Spring的复制方法传递参数类似,但是用的BeanCopier的方法,如果处理简单复制的数据,速度会比BeanUtils的方法更快,同时提供是否忽略空值的参数,也不用自定义方法获取空值参数名集合,即BeanUtil使用的是CopyOptions用于复制对象属性的方法,提供可忽视空值的方法,使用起来更方便易懂

对比BeanUtils的方法可知仅设置对应的CoptOption后就可仅复制非空值的字段数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值