mapstruct常用属性填充示例

适用版本jdk8、jdk11

第一步 引入坐标



    org.mapstruct
    mapstruct
    1.4.1.Final


    org.mapstruct
    mapstruct-processor
    1.4.1.Final
    provided

第二步 定义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 toGoodInfoVOs(List 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 toGoodInfoVOs(List goods) {
        if (goods == null) {
            return null;
        } else {
            List 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命令 查看结果

mapstruct常用属性填充示例_第1张图片

 

示例二:类型不匹配时可配置忽略该字段自动转换,另外在代码中自定义转化

@Mappings({
        @Mapping(target = "signintime", ignore = true),
        @Mapping(target = "signouttime", ignore = true)
})
GuideWorkTargetResDTO toGuideWorkTargetResDTO(OrgWorkOrderDistribution orgWorkOrderDistribution);

你可能感兴趣的:(java,java)