java如何使用mapstruct将对象映射为字段?
我需要将多个dto映射到实体。 几乎所有的dto都有对另一个dto的引用,我不知道在映射dto时如何传递引用
以下是该地址的一个业务实现:
addressRepository.saveAll(dtos.stream()
.map(addressMapper::asEntity)
.collect(Collectors.toList())).stream()
.map(addressMapper::asDto)
.collect(Collectors.toList());
这是地图绘制者
@Mappings({
@Mapping(target="streetName", source="streetName"),
@Mapping(target="streetNumber", source="streetNumber"),
@Mapping(target="block", source="block"),
@Mapping(target="floor", source="floor")
})
CsvBusinessData asDto(AddressEntity address);
@InheritInverseConfiguration
AddressEntity asAddressEntity(CsvBusinessData address);
所有实现者从同一dto读取数据,然后将它们映射到dto和Entite
以下是针对客户实施的:
customerRepository.saveAll(dtos.stream()
.map( csvMapper::asCustomerEntity)
.collect(Collectors.toList())).stream()
.map(customerMapper::asDto)
.collect(Collectors.toList());
以及我希望引用到映射地址实体的映射(我的客户实体有一个地址类型字段)
@Mappings({
@Mapping(target = "nom", source = "lastName"),
@Mapping(target = "nd", source = "accountNumber"),
@Mapping(target = "logo", source = "logo"),
@Mapping(target = "address", source = "address"
)
})
CsvBusinessData asDto(CustomerEntity customer);
@InheritInverseConfiguration
CustomerEntity asCustomerEntity(CsvBusinessData customer);
多谢各位
# 1 楼答案
首先,您不必为具有相同名称的字段进行映射,MapStruct会为您进行映射。例如块。 1) 您的对象是相关的: 您可以对相关对象使用“uses”功能
2)您的对象不相关: 您可以通过传递几个对象作为参数来解决这个问题。但你们必须有自己的反方向方法。若在AddressEntity和CustomerEntity中有相同的字段名,那个么只需指定它的地址即可。街道名称或顾客。姓氏