它確實取決於您使用的是哪個版本的MapStruct。 (如果您使用的版本低於1.2.0.Beta和必須的)
@Mapper
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
@Mapping(target = "anotherEntity.propE", source = "anotherEntityDTO.propD")
Entity map(EntityDDTO dto);
}
另一種選擇:如果您正在使用1.2.0.Beta或更高版本,他們可以只定義EntityMapper
接口的嵌套的屬性是在增加新的方法你EntityMapper
這樣的:
@Mapper
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
Entity map(EntityDDTO dto);
@Mapping(target = "propE", source = "propD")
AnotherEntity map(AnotherEntityDTO);
}
,或者你可以定義一個新的映射AnotherEntityMapper
爲AnotherEntity
和使用@Mapper(uses = {AnotherEntityMapper.class})
:
@Mapper
public interface AnotherEntityMapper {
@Mapping(target = "propE", source = "propD")
AnotherEntity map(AnotherEntityDTO);
}
@Mapper(uses = {AnotherEntityMapper.class}
public interface EntityMapper {
@Mapping(target = "anotherEntity", source = "anotherEntityDTO")
Entity map(EntityDDTO dto);
}
這真的取決於你的用例。如果您需要在其他地方執行AnotherEntity
和AnotherEntityDTO
之間的映射,我會建議使用新界面,以便您可以在需要的地方重複使用它