VO与PO之间相互转换

转换基类:


public abstract class BaseConverter<V, P> {

private static Logger logger = LoggerFactory.getLogger(BaseConverter.class);

/**
* 值对象与域对象之间属性复制
*
* @param dto
* 值对象
* @param domain
* 域对象
* @param flag
* 复制方向
*/
protected void copyProperties(V dto, P domain, ConverterFlag flag) {

switch (flag) {

case PO2VO:
copySameProperties(dto, domain);
copyDiffPropertiesFromPO2VO(dto, domain);
break;

case VO2PO:
copySameProperties(domain, dto);
copyDiffPropertiesFromVO2PO(domain, dto);
break;

default:
break;
}

}

/**
* 同名属性复制
*
* @param target
* 目标对象
* @param source
* 来源对象
*/
protected void copySameProperties(Object target, Object source) {

try {
RtsBeanUtil.copyProperties(target, source);
} catch (IllegalAccessException e) {
logger.error("对象属性值复制出错:原数据为{}, 目标数据为{}。", source, target);
} catch (InvocationTargetException e) {
logger.error("对象属性值复制出错:原数据为{}, 目标数据为{}。", source, target);
}
}

/**
* VO非同名属性复制到PO属性
*
* @param target
* 域对象
* @param source
* 值对象
*/
public abstract void copyDiffPropertiesFromVO2PO(P target, V source);

/**
* PO非同名属性复制到VO属性
*
* @param target
* 值对象
* @param source
* 域对象
*/
public abstract void copyDiffPropertiesFromPO2VO(V target, P source);

}


日期转换工具:

public class DateConverter implements Converter {

@SuppressWarnings("rawtypes")
@Override
public Object convert(Class type, Object value) {

if (value == null) {
return null;
}

// 相同类型不需要转换
if (type.equals(value.getClass())) {
return value;
}

// 字符串转日期格式
if (value instanceof String) {
return DateUtil.getDateFormatStr(((String) value).trim(),
DateUtil.DATA_FORMAT_PATTERN);
}

// 其他不支持
return null;
}
}


注册自定义转换机制:

public class CustomerBeanUtil extends BeanUtils {

private RtsBeanUtil() {

}

static {
// 注册sql.date的转换器,即允许BeanUtils.copyProperties时的源目标的sql类型的值允许为空
ConvertUtils.register(new SqlDateConverter(), java.util.Date.class);
// 注册util.date的转换器,即允许BeanUtils.copyProperties时的源目标的util类型的值允许为空
ConvertUtils.register(new DateConverter(), java.util.Date.class);
}

public static void copyProperties(Object target, Object source)
throws InvocationTargetException, IllegalAccessException {

BeanUtils.copyProperties(target, source);
}

}


转换例子:

public class ParamConverter extends BaseConverter<ParamDTO, ParamInfo> {

public ParamDTO getParamDTO(ParamInfo apply) {

ParamDTO paramDTO = new ParamDTO();
copyProperties(paramDTO, apply, ConverterFlag.PO2VO);

return paramDTO;
}

public ParamInfo getParamInfo(ParamDTO paramDTO) {

ParamInfo apply = new ParamInfo();
copyProperties(paramDTO, apply, ConverterFlag.VO2PO);

return apply;
}

@Override
public void copyDiffPropertiesFromVO2PO(ParamInfo target, ParamDTO source) {

target.setParamCode(source.getParam().getCode());
target.setParamName(source.getParam().getText());

}

@Override
public void copyDiffPropertiesFromPO2VO(ParamDTO target, ParamInfo source) {

target.setParam(ParamCode.findByCode(source.getParamCode()));

}

}




至此,VO与PO之间的转换完成,其中主要用的第三份工具 BeanUtil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值