在实际开发中,我们难免遇到想对象之间相互转换的问题,例如dto转数据库实体,数据库实体转vo等等操作,其实spring框架已经给我们提供了对象copy的工具【org.springframework.beans.BeanUtils】,例如下面的一个copy方法:
public static void copyProperties(Object source, Object target) throws BeansException {
copyProperties(source, target, (Class)null, (String[])null);
}
这个方法需要传入两个参数,第一个参数是原始对象,第二个是需要转化成的目标对象。但是这个方法对于我们来说不是太友好,因为这个目标对象需要手动 new 出来,才能执行这个转化方法,例如:
User u= new User("roydon", "18");
UserVo uv= new UserVo;
BeanUtils.copyProperties(u, uv);
return uv;
为了方便让copy工具类直接返回Vo对象,封装如下方法:
public static <T> T copyBean(Object source, Class<T> clazz) {
// 创建目标对象
T result = null;
try {
result = clazz.newInstance();
// copy
BeanUtils.copyProperties(source, result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
在方法中第二个参数为Class字节码对象,copy完成后返回目标对象。
所以上面的转化示例可是使用我们封装的工具类写成如下格式:
User u= new User("roydon", "18");
return BeanCopyUtils.copyBean(u, UserVo.class);
如果需要copy一个集合:
public static <O, V> List<V> copyBeanList(List<O> list, Class<V> clazz) {
return list.stream().map(o -> copyBean(o, clazz)).collect(Collectors.toList());
}
stream流里进行copyBean处理即可;
List<UserVo> uvs= BeanCopyUtils.copyBeanList(userList, UserVo.class);