mapstrcut

依赖

    <java.version>1.8</java.version>
    <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
</properties>
 <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-jdk8</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${org.mapstruct.version}</version>
        <scope>provided</scope>
    </dependency>

属性映射代码

点击查看代码
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

/**
 * user类转化映射
 * @author JiangFeng
 * @since 2023/2/6
 */
@Mapper
public interface UserPojoMapper {
	// 写全先,写一半报错先不管
    UserPojoMapper mapper = Mappers.getMapper(UserPojoMapper.class);

    @Mappings({
        @Mapping(source = "name", target = "fullName")
    })
    User tifUser2User(TifUser tifUser);

}

如何使用

   User dbUser = UserPojoMapper.mapper.tifUser2User(tifUser);

嵌套对象转换

2种方式对比:

优点 缺点
方法标记 简单 耦合度高,易出现bug,VO里面的属性名改了,方法属性容易忘记
spring管理 后期属性名可以随便改,便于维护 类上需要标记;需要多一个子转化类;

在方法上标明

1: 方法

  @Mapping(source = "stoTicketCheckMethodAddReqVOList", target = "stoTicketCheckMethodAddReqBOList")
    @Mapping(source = "stoTicketStockAddReqVOList", target = "stoTicketStockAddReqBOList")
    @Mapping(source = "stoTicketPriceAddReqVOList", target = "stoTicketPriceAddReqBOList")
    //@Mapping(source = "stoTicketBaseBatchSetVO", target = "stoTicketBaseBatchSetBO")
    StoTicketBaseAddReqBO addReqVo2AddReqBo(StoTicketBaseAddReqVO addReqVO);

2:方法入参对象

public class  StoTicketBaseAddReqVO implements Serializable{
 private List<StoTicketCheckMethodAddReqVO> stoTicketCheckMethodAddReqVOList;
}

3: 方法返回对象

public class  StoTicketBaseAddReqBO implements Serializable{

private List<StoTicketCheckMethodAddReqBO> stoTicketCheckMethodAddReqBOList;
}

类上标明的方式

Spring容器化的方式

1-1:最上层转化类

// 最外层转化类
// HouseApproveConvert子转化类
@Mapper(componentModel = "spring",uses = {HouseInfoConvert.class,HouseApproveConvert.class,
        HouseOrderConvert.class,HousePayConvert.class,HouseUserConvert.class})
public interface HouseAllInfoConvert {
    HouseAllInfoConvert INSTANCE = Mappers.getMapper(HouseAllInfoConvert.class);

    HouseAllInfoAppRespVO getBO(HouseAllInfoWebRespVO obj);

}

1-2: 子转化类

@Mapper(componentModel = "spring")
public interface HouseInfoConvert {
    HouseInfoConvert INSTANCE = Mappers.getMapper(HouseInfoConvert.class);

    HouseInfoBO getBO(HouseInformationPO po);

}

2: 转化类依赖注入

public class HouseStoOrderController implements IHouseStoOrderClient {
    @Autowired
    private HouseAllInfoConvert houseAllInfoConvert;
}
posted @ 2023-02-06 17:25  jf666new  阅读(39)  评论(0)    收藏  举报