mapstruct的用法
m0_54861649 人气:0qualifiedByName的意思就是使用这个Mapper接口中的指定的默认方法去处理这个属性的转换,而不是简单的get set。网上一直没找到…
可用于格式化小数位等,在po转换为vo时就已格式化小数位完成,所以不必单独再写代码处理小数位。
1 引用pom1 ,能正常使用mapstruct的注解,但不会生成Impl类
<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8 --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Final</version> </dependency>
引用pom2 才会生成Impl类
2 定义ConvertMapper
package com.weather.weatherexpert.common.model.mapper; import com.weather.weatherexpert.common.model.po.AreaPO; import com.weather.weatherexpert.common.model.vo.AreaVO; import org.mapstruct.MapMapping; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Named; import org.mapstruct.factory.Mappers; import java.text.DecimalFormat; /** * <p>Title: </p> * <p>Description: </p> * */ @Mapper public interface ConvertMapper { ConvertMapper INSTANCE = Mappers.getMapper(ConvertMapper.class); @Mapping(source = "pm25", target = "pm25", qualifiedByName = "formatDoubleDef") AreaVO areaPO2areaVO(AreaPO areaPO); @Named("formatDoubleDef")//需要起个名字,不然报错,可以与方法名一致,当然也可以不一致 default Double formatDouble(Double source) { DecimalFormat decimalFormat = new DecimalFormat("0.00");//小数位格式化 if (source == null) { source = 0.0; } return Double.parseDouble(decimalFormat.format(source)); } }
3 定义源类和目标类
public class AreaPO { private String cityName; private Integer haveAir; private Double pm25; private String pm10Str; ............ } public class AreaVO { private String cityName; private Integer haveAir; private Double pm25; private String pm25Str; private Double pm10; ...... }
4 看生成的Impl类ConvertMapperImpl
package com.weather.weatherexpert.common.model.mapper; import com.weather.weatherexpert.common.model.po.AreaPO; import com.weather.weatherexpert.common.model.vo.AreaVO; public class ConvertMapperImpl implements ConvertMapper { public ConvertMapperImpl() { } public AreaVO areaPO2areaVO(AreaPO areaPO) { if (areaPO == null) { return null; } else { AreaVO areaVO = new AreaVO(); areaVO.setPm25(this.formatDouble(areaPO.getPm25())); areaVO.setCityName(areaPO.getCityName()); areaVO.setHaveAir(areaPO.getHaveAir()); return areaVO; } }
5 测试
AreaPO areaPO = new AreaPO("忻州", 1, 1.256879); AreaVO areaVO = ConvertMapper.INSTANCE.areaPO2areaVO(areaPO); logger.info("JSON.toJSONString(areaVO):" + JSON.toJSONString(areaVO));
输出:
JSON.toJSONString(areaVO):{“cityName”:“忻州”,“haveAir”:1,“pm25”:1.26}
关于@Target注解的使用可见:
加载全部内容