mapstruct的用法之qualifiedByName示例详解
qualifiedByName的意思就是使用这个Mapper接口中的指定的默认方法去处理这个属性的转换,而不是简单的get set。网上一直没找到…
可用于格式化小数位等,在po转换为vo时就已格式化小数位完成,所以不必单独再写代码处理小数位。
1 引用pom1 ,能正常使用mapstruct的注解,但不会生成Impl类
org.mapstruct mapstruct-jdk81.2.0.Final
引用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; /** * Title:
* Description:
* */@Mapperpublic 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注解的使用可见:
详解JDK 5 Annotation 注解之@Target的用法介绍
【mapstruct的用法之qualifiedByName示例详解】到此这篇关于mapstruct的用法之qualifiedByName示例详解的文章就介绍到这了,更多相关mapstruct的用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 关于@Valid注解大全以及用法规范
- java8中的Collectors.groupingBy用法详解
- Vue使用MD5对前后端进行加密的实现
- 计算机类说课优秀模板,广东省创新杯说课大赛计算机专业类一等奖作品(《模板的应用》教学设计.pdf...)
- 学校计算机大赛的工作总结,工作总结之中国大学生计算机设计大赛参赛经验与总结...
- 游戏|2022年的GameFi会有什么变化()
- 人工智能|2022年值得关注的22项新兴技术
- 人工智能|《经济学人》(2022年值得关注的22项新兴技术)
- 人工智能|下一个是什么(2022年值得关注的22项新兴技术)
- 如何优雅的记录操作日志()