记得第一次看到mapstruct就被它吸引了,简直堪称对象转换神器,原先代码中需要对象之间转换,会使用BeanUtil但是它的性能不高,而且使用局限性也大,遇到不是同名的属性或者属性类型不一样就菜鸡了,遇到这种情况只能自己定义方法实现对象转换,随之而来的是一大堆的get\set简直令人发狂。有了mapstruct对生活又有了信心了。纯属开玩笑,但mapstruct真的很强,你值得拥有。
// 使用MapStruct不仅可以做到即使属性名不一样也能正常映射
// 还可以做到不同类型之间也可以做到平滑映射
// 而且还可以自定义转换规则,你说强大不强大
// 其实它的原理也很简单,在代码编译阶段就自动为我们生成了实现类,实现类里就是根据我们的映射规则做了一堆的get\set,减少了我们无用的工作,让我们只专注业务开发
@Mappings({
@Mapping(source = "user.address.name", target = "addressName"),
@Mapping(source = "userName", target = "nickName"),
@Mapping(source = "balance", target = "balance", qualifiedByName="converterYuan")
})
CampaignResDTO toCampaignResDTO(Campaign campaign);
@Named("converterYuan")
default String converterYuan(Long cents) {
if (cents != null) {
return BigDecimal.valueOf(cents).divide(new BigDecimal(100)).setScale(2).toString();
} else {
return "";
}
}
@Named("converterCents")
default Long converterCents(Double yuan) {
DecimalFormat format = new DecimalFormat();
format.setMaximumFractionDigits(2);
format.setGroupingSize(0);
format.setRoundingMode(RoundingMode.FLOOR);
yuan = Double.valueOf(format.format(yuan))*100;
return yuan.longValue();
}