Spring 框架BeanUtils工具类使用(1)

BeanUtils 工具类提供了非常丰富的Java反射API,开发过程中使用恰当可以减少很懂工作量。 其中最常用的莫过于copyProperties

场景设想

比如有属性比较多的两个类,User.javaUserForm.java 它们俩有部分属性字段是一样的,但UserForm.java是对应前端表单、User.java对应数据库的实体映射,前者带的属性比较多,或者有些字段名称不一样,我现在从前端拿到UserForm.java 实体后要快速把匹配的属性拷贝到User.java 中来。

实践

一般的做法

  //接口传来 userForm对象
   User myUser= new User();
      myUser.setId(userForm.getId())
      myUser.setName(userForm.getName())
       ........
      myUser.setDepartment(userForm.getOrigin())

使用 copyProperties 接口后

    User myUser= new User();
     //批量拷贝匹配的属性
     copyProperties(myUser, userForm);
    //不匹配的属性再更新过来
     myUser.setDepartment(userForm.getOrigin())

当然 copyProperties 接口还提供了其他参数的入口可以按需使用, 下面封装一个工具类

    public class BeanCopyUtil extends BeanUtils {
    /**
     * 集合数据的拷贝
     * @param sources: 数据源类
     * @param target: 目标类::new(eg: UserVO::new)
     * @return
     */
    public static  List copyListProperties(List sources, Supplier target) {
        return copyListProperties(sources, target, null);
    }

    /**
     * S: 数据源类 ,T: 目标类
     */
    public static  List copyListProperties(List sources, Supplier target, BeanUtilsCallBack callBack) {
        List list = new ArrayList<>(sources.size());
        for (S source : sources) {
            T t = target.get();
            copyProperties(source, t);
            list.add(t);
            if (callBack != null) {
                // 回调
                callBack.callBack(source, t);
            }
        }
        return list;
    }
}

你可能感兴趣的:(Spring 框架BeanUtils工具类使用(1))