开发中经常有一些DO转VO,VO转DO,DTO转DO等等的需求,一般情况下我们会一个一个字段的set,如下:
public static GuideCardInfo buildEntity(GuideCardInfoVO guideCardInfoVO) {
GuideCardInfo guideCardInfo = new GuideCardInfo();
if (!ObjectUtils.isEmpty(guideCardInfoVO.getId())) {
guideCardInfo.setId(Integer.parseInt(guideCardInfoVO.getId()));
}
guideCardInfo.setCardId(UUID.randomUUID().toString());
guideCardInfo.setBankName(guideCardInfoVO.getBankName());
guideCardInfo.setCardLevel(guideCardInfoVO.getCardLevel());
guideCardInfo.setCurrency(guideCardInfoVO.getCurrency());
guideCardInfo.setCity(guideCardInfoVO.getCity());
guideCardInfo.setCardOrg(guideCardInfoVO.getCardOrg());
guideCardInfo.setAnnualFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getAnnualFee()));
guideCardInfo.setAnnualFeeType(guideCardInfoVO.getAnnualFeeType());
guideCardInfo.setColor(guideCardInfoVO.getColor());
guideCardInfo.setCardType(guideCardInfoVO.getCardType());
guideCardInfo.setCashRate(guideCardInfoVO.getCashRate());
guideCardInfo.setCashFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getCashFee()));
guideCardInfo.setViolateFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getViolateFee()));
guideCardInfo.setOverFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getOverFee()));
guideCardInfo.setOverflowFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getOverflowFee()));
guideCardInfo.setLoanUse(guideCardInfoVO.getLoanUse());
guideCardInfo.setSplitFee(CurrencyUtil.yuan2centLong(guideCardInfoVO.getSplitFee()));
guideCardInfo.setPrivilegeInfo(guideCardInfoVO.getPrivilegeInfo());
guideCardInfo.setWeight(Integer.parseInt(guideCardInfoVO.getWeight() == "" ? "0" : guideCardInfoVO.getWeight()));
guideCardInfo.setPictureLink(guideCardInfoVO.getPictureLink());
guideCardInfo.setCardName(guideCardInfoVO.getCardName());
guideCardInfo.setTags(guideCardInfoVO.getTags());
guideCardInfo.setRightTag(guideCardInfoVO.getRightTag());
guideCardInfo.setBriefPrivilege(guideCardInfoVO.getBriefPrivilege());
guideCardInfo.setCreateTime(new Date());
guideCardInfo.setModifyTime(new Date());
return guideCardInfo;
}
字段少的时候勉强写一下,当字段非常多的时候需要写的代码就非常多,这时就可以用到BeanUtils中的copyProperties方法。
BeanUtils.copyProperties(guideCardInfo, guideCardInfoVO);
org.springframework.beans.BeanUtils中copyProperties(Object source, Object target)方法,方法API是这样写的:
Copy the property values of the given source bean into the target bean.
* <p>Note: The source and target classes do not have to match or even be derived
* from each other, as long as the properties match. Any bean properties that the
* source bean exposes but the target bean does not will silently be ignored.
注意:BeanUtils.copyProperties(Object source, Object target)只能帮你复制同名且同类型的字段,其他不同名或不同类型的字段会被忽略。
虽然属性复制具有局限性,但已经可以让我们少写很多set代码,其余需要特殊处理的字段我们再另外处理即可。
网友评论