Bean设计
Bean设计
VO、BO、DTO相互转换
思路一:封装一个工具类实现相互转换
工具类
package com.moluo.moapi.common.util;
import com.moluo.moapi.common.bean.MoPage;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import java.util.ArrayList;
import java.util.List;
/**
* 转换工具类
* <p>
* 用于实现VO、BO、DTO等对象之间的相互转换
*/
public class ConvertUtil {
/**
* 源类型对象转换为目标类型对象
*
* @param src 源类型对象
* @param clazz 目标类
* @param <S> 源类
* @param <T> 目标类
* @return 目标类型对象
*/
public static <S, T> T convertTo(S src, Class<T> clazz) {
T result = null;
try {
result = clazz.newInstance();
BeanUtils.copyProperties(src, result);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return result;
}
/**
* 源类型列表转换为目标类型列表
*
* @param srcList 源类型列表
* @param clazz 目标类
* @param <S> 源类
* @param <T> 目标类
* @return 目标类型列表
*/
public static <S, T> List<T> convertTo(List<S> srcList, Class<T> clazz) {
List<T> result = new ArrayList<>(srcList.size());
for (Object srcItem : srcList) {
try {
T destItem = clazz.newInstance();
BeanUtils.copyProperties(srcItem, destItem);
result.add(destItem);
} catch (InstantiationException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
return result;
}
/**
* 源类型Page转换为目标类型MoPage
*
* @param srcPage 源类型Page
* @param clazz 目标类
* @param <S> 源类
* @param <T> 目标类
* @return 目标类型MoPage
*/
public static <S, T> MoPage<T> convertTo(Page<S> srcPage, Class<T> clazz) {
MoPage<T> result = new MoPage<>();
result.setPageNo(srcPage.getNumber() + 1);
result.setPageSize(srcPage.getPageable().getPageSize());
result.setTotalCount(srcPage.getTotalElements());
List<T> list = new ArrayList<>();
for (Object srcItem : srcPage.getContent()) {
try {
T destItem = clazz.newInstance();
BeanUtils.copyProperties(srcItem, destItem);
list.add(destItem);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
result.setData(list);
return result;
}
/**
* 源类型Page转换为同类型MoPage
*
* @param srcPage 源类型Page
* @param <T> 源类型
* @return 同类型MoPage
*/
public static <T> MoPage<T> convertTo(Page<T> srcPage) {
MoPage<T> result = new MoPage<>();
result.setPageNo(srcPage.getNumber() + 1);
result.setPageSize(srcPage.getPageable().getPageSize());
result.setTotalCount(srcPage.getTotalElements());
result.setData(srcPage.getContent());
return result;
}
}使用方式
意见
思路二:编写一个父类实现相互转换
父类
使用方式
意见
思路三:编写一个接口实现相互转换
接口
使用方式
意见
讨论
Last updated