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;
}

浙公网安备 33010602011771号