0
点赞
收藏
分享

微信扫一扫

MapStruct 实例 ----自用

雷亚荣 2022-01-30 阅读 54

还要两天就是春节了,还在上班且大年初一要值班的我提前祝大家新年快乐 😂

原理固然很重要,实用最是重要

      为安全涉及敏感信息的全替换了,领会精神即可,主要写给自己看

target是SkuInfo,要转的对象

source是参数,被转的对象,源于谁

expression表达式,多用java,这里

com.test.test.test.test.enums.test.PluTypeEnum.SOLID相信大家可以猜到(我给自己看的,cue你们干什么)一看就是全路径,不需要单独处理的可以参考第一行
@Mapping(target = "sectionCode", source = "deptNo")
@Mapping(target = "solid", expression = "java(pluBO.getPluType() != null && pluBO.getPluType() == com.megvii.lbg.fr.wes.enums.warebasic.PluTypeEnum.SOLID.getType())")
SkuInfo toAlgoSkuInfo(PluBO pluBO);

第二弹
 @Mapping(
            target = "list",
            expression =
                    "java(order.getList().stream().map(test -> test.getId()).collect(java.util.stream.Collectors.joining(\",\")))"
    )
 @Mapping(target = "operator", source = "createBy")
 VO toVO(Order order);
会转成:全路径请注意下,要考
VO.setList( order.getList().stream().map(test -> test.getId()).collect(java.util.stream.Collectors.joining(",")) );

list转map肿磨拌?类中写方法

ps:方法大概是这么个架子,方法名convertFooListToMap不能改,里面的流式处理我瞎写滴

default Map<String, Integer> convertFooListToMap(List<test> list) {
        return list.stream()
                .collect(Collectors.groupingBy(DO::getSkuCode,
                        Collectors.reducing(0, DO ->
                                DO.getQty() - DO.getCancelQty(), Integer::sum)));
    }

list转list,一般都是for循环借助单个类的转换,如果单个类的转换想自定义,怎么办

List<Info> toAlgoStock(List<Do> list);

default Info toAlgoStock(Do test) {
      //do some thing by yourself
}

指定时区,说到这个,气得我哟

//test是Bo的一个属性,这里为属性的属性赋值,这里指定了8小时
@Mapping(target = "test.source", constant = "10")
@Mapping(target = "test.desArea", expression = "java(entry.getValue().get(0).getDesArea())")
@Mapping(target = "test.orderCreateAt", expression = "java(java.time.LocalDateTime.ofEpochSecond(entry.getValue().get(0).getCreateDt(), 0, java.time.ZoneOffset.ofHours(8)))")
Bo mapOutboundOrderByMapEntry(Map.Entry<String, List<Info>> entry);


//也可以指定时区,注意全路径
@Mapping(target = "expectAt", expression = "java(java.time.LocalDateTime.ofInstant(test.getExpectAt().toInstant(), java.time.ZoneId.of( \"GMT+8\" )))")
VO toVo(Test test);

自增值,可以借助全路径调自己的方法

@Mapping(target = "info", expression = "java(com.test.test.test.test.utils.IDCreatorUtil.getRequestId())")
举报

相关推荐

0 条评论