开发过程中,总会涉及到一些BO、PO、DTO、VO等转换, 比如userVO转换成userPO。自己写个转换方法如下
private UserPO converterUser(UserVO user) {
UserPO userPO = new UserPO();
userPO.setId(user.getId());
// add more feild...
return userPO;
}
这个是最原始也是最费劲的,某个字段不小心写错了还成就了一个bug。但有些jar包里面有现成的方法可以直接使用, 比如spring-beans包里面的BeanUtils.copyProperties(source,target);
源码如下
故此写出工具类如下
package com.yulisao.utils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class ConverterUtil {
/**
* 复制对象
*/
public static <T,K> T convert(K source, Class<T> clazz) {
T t = BeanUtils.instantiate(clazz);
BeanUtils.copyProperties(source, t);
return t;
}
/**
* 复制集合
*/
public static <T,K> List<T> convertList(List<K> sourceList, Class<T> clazz) {
if (CollectionUtils.isEmpty(sourceList)) {
return null;
}
ArrayList<T> target = new ArrayList<>();
sourceList.forEach(k -> target.add(convert(k, clazz)));
return target;
}
}
调用示例如下
public static void main(String[] args) {
UserVO vo = new UserVO(); // 实际中从数据库查询得到数据
UserPO po = ConverterUtil.convert(vo, UserPO.class); // 进行转换,最好先判vo是否空
List<UserVO> voList = new ArrayList<>(); // 实际中从数据库查询得到数据
List<UserPO> poList = ConverterUtil.convertList(voList, UserPO.class); // 进行转换,最好先判voList是否空
}
两个入参分别是 源对象/源对象集合 目标对象.class