适用版本jdk8、jdk11
第一步 引入坐标
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.1.Final</version>
<scope>provided</scope>
</dependency>
第二步 定义mapper
@Mapper
public interface GoodInfoMapper {
GoodInfoMapper INSTANCE = Mappers.getMapper(GoodInfoMapper.class);
/**
* GoodInfoDTO的属性和GoodInfoVO属性相同时不需要显示指定@Mapping
* @param good
* @return
*/
GoodInfoVO toGoodInfoVO(GoodInfoDTO good);
/**
*
* 此方法必须写 {@link GoodInfoMapper#toGoodInfoVO}方法 原因查看编译后class文件
* @param goods
* @return
*/
List<GoodInfoVO> toGoodInfoVOs(List<GoodInfoDTO> goods);
@Mappings({
@Mapping(source = "typeName",target = "typeName"),
@Mapping(source = "good.goodId",target = "goodId"),
@Mapping(source = "good.goodName",target = "goodName"),
@Mapping(source = "good.goodPrice",target = "goodPrice")
})
GoodInfoVO toGoodInfoVO(GoodInfoDTO good, String typeName);
@Mappings({
@Mapping(target = "remainTime", expression = "java(mapRemainTime(goodInfoFrom.getDateTime()))")
})
GoodInfoVO toGoodInfoVO(GoodInfoFrom goodInfoFrom);
/**
* mapRemainTime.
* @param endTime Date
* @return long
*/
default long mapRemainTime(Date endTime) {
if (endTime != null) {
return endTime.getTime() - System.currentTimeMillis();
}
return 0L;
}
@Mapping(target = "goodId", expression = "java(goodInfoFrom.getGoodId() != null ? goodInfoFrom.getGoodId() : \"0\")")
GoodInfoVO nonNullGoodIdToGoodInfoVO(GoodInfoFrom goodInfoFrom);
}
第三步 使用
@RestController
public class GoodInfoController {
/**
* 查询商品详情
* @param id
* @return
*/
@RequestMapping(value = "/detail/{id}")
public GoodInfoVO detail(@PathVariable("id") Long id)
{
GoodInfoDTO goodInfoBean = new GoodInfoDTO();
goodInfoBean.setGoodId("232").setGoodName("冰箱").setGoodPrice(23.1d).setTypeName("厨房家电");
//返回转换dto
GoodInfoFrom goodInfoFrom = new GoodInfoFrom();
goodInfoFrom.setGoodId("fsfewgfdasd");
GoodInfoVO goodInfoVO = GoodInfoMapper.INSTANCE.nonNullGoodIdToGoodInfoVO(goodInfoFrom);
return goodInfoVO;
}
}
第四步 运行maven compile 及查看编译后target下XXMapperImpl.class文件
public class GoodInfoMapperImpl implements GoodInfoMapper {
public GoodInfoMapperImpl() {
}
public GoodInfoVO toGoodInfoVO(GoodInfoDTO good) {
if (good == null) {
return null;
} else {
GoodInfoVO goodInfoVO = new GoodInfoVO();
goodInfoVO.setGoodId(good.getGoodId());
goodInfoVO.setGoodName(good.getGoodName());
goodInfoVO.setGoodPrice(good.getGoodPrice());
goodInfoVO.setTypeName(good.getTypeName());
return goodInfoVO;
}
}
public List<GoodInfoVO> toGoodInfoVOs(List<GoodInfoDTO> goods) {
if (goods == null) {
return null;
} else {
List<GoodInfoVO> list = new ArrayList(goods.size());
Iterator var3 = goods.iterator();
while(var3.hasNext()) {
GoodInfoDTO goodInfoDTO = (GoodInfoDTO)var3.next();
list.add(this.toGoodInfoVO(goodInfoDTO));
}
return list;
}
}
public GoodInfoVO toGoodInfoVO(GoodInfoDTO good, String typeName) {
if (good == null && typeName == null) {
return null;
} else {
GoodInfoVO goodInfoVO = new GoodInfoVO();
if (good != null) {
goodInfoVO.setGoodId(good.getGoodId());
goodInfoVO.setGoodName(good.getGoodName());
goodInfoVO.setGoodPrice(good.getGoodPrice());
}
if (typeName != null) {
goodInfoVO.setTypeName(typeName);
}
return goodInfoVO;
}
}
public GoodInfoVO toGoodInfoVO(GoodInfoFrom goodInfoFrom) {
if (goodInfoFrom == null) {
return null;
} else {
GoodInfoVO goodInfoVO = new GoodInfoVO();
goodInfoVO.setGoodId(goodInfoFrom.getGoodId());
goodInfoVO.setGoodName(goodInfoFrom.getGoodName());
goodInfoVO.setGoodPrice(goodInfoFrom.getGoodPrice());
goodInfoVO.setTypeName(goodInfoFrom.getTypeName());
goodInfoVO.setRemainTime(this.mapRemainTime(goodInfoFrom.getDateTime()));
return goodInfoVO;
}
}
public GoodInfoVO nonNullGoodIdToGoodInfoVO(GoodInfoFrom goodInfoFrom) {
if (goodInfoFrom == null) {
return null;
} else {
GoodInfoVO goodInfoVO = new GoodInfoVO();
goodInfoVO.setGoodName(goodInfoFrom.getGoodName());
goodInfoVO.setGoodPrice(goodInfoFrom.getGoodPrice());
goodInfoVO.setTypeName(goodInfoFrom.getTypeName());
goodInfoVO.setGoodId(goodInfoFrom.getGoodId() != null ? goodInfoFrom.getGoodId() : "0");
return goodInfoVO;
}
}
}
示例一:直接植入代码片段
@Mappings({
@Mapping(target = "cellPhone", expression = "java(handle(rStoreFansRecordDO.getMaskPhone()))"),
//接口只能有一个默认方法,其他简单转换需求可直接植入代码片段
@Mapping(target = "plainCellPhone", expression = "java(rStoreFansRecordDO.getCellPhone() == null?\"\":rStoreFansRecordDO.getCellPhone())")
})
CustomerPageResponseDTO toCustomerPageResponseDTO(RStoreFansRecordDO rStoreFansRecordDO);
点击maven插件 complie命令 查看结果
示例二:类型不匹配时可配置忽略该字段自动转换,另外在代码中自定义转化
@Mappings({
@Mapping(target = "signintime", ignore = true),
@Mapping(target = "signouttime", ignore = true)
})
GuideWorkTargetResDTO toGuideWorkTargetResDTO(OrgWorkOrderDistribution orgWorkOrderDistribution);