mapstruct的用法之qualifiedByName示例详解
短信预约 -IT技能 免费直播动态提醒
qualifiedByName的意思就是使用这个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;
@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注解的使用可见:
详解JDK 5 Annotation 注解之@Target的用法介绍
到此这篇关于mapstruct的用法之qualifiedByName示例详解的文章就介绍到这了,更多相关mapstruct的用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341