開発プロセス中、userVO から userPO への変換など、BO、PO、DTO、VO などの変換が常に発生します。次のように独自の変換メソッドを記述します
private UserPO converterUser(UserVO user) {
UserPO userPO = new UserPO();
userPO.setId(user.getId());
// add more feild...
return userPO;
}
これは最も独創的で最も労力がかかるもので、特定のフィールドを誤って間違って書き込んだ場合にバグが発生します。ただし、一部のjarパッケージにはそのまま利用できる既成のメソッドが用意されており、例えばBeanUtils.copyProperties(source,target);
spring-beansパッケージのソースコードは以下のとおりなので、
ツールクラスは以下のように記述します。
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是否空
}
2 つの入力パラメータは、ソース オブジェクト/ソース オブジェクト コレクションのターゲット オブジェクト.クラスです。