以下是我的DTO:
public class TagVolumeDTO {
private Long id;
private Long idTag;
//...
}
public class TagTDO {
private Long id;
private Long amount;
//...
}
这是我的实体:
public class TagVolume {
private Long id;
private Tag tag;
//...
}
public class Tag {
private Long id;
private Long amount;
//...
}
我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。 这可能吗?
答案 0 :(得分:0)
配置:
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
mapper.typeMap(TagVolume.class, TagVolumeDTO.class)
.addMappings(m -> m.map(src -> src.getTag().getId(), TagVolumeDTO::setIdTag));
用法:
Tag tag = new Tag();
tag.setId(1L);
tag.setAmount(10L);
TagVolume tagVolume = new TagVolume();
tagVolume.setId(123L);
tagVolume.setTag(tag);
System.out.println(mapper.map(tagVolume.getTag(), TagDTO.class));
System.out.println(mapper.map(tagVolume, TagVolumeDTO.class));
输出:
TagDTO(id = 1,金额= 10)
TagVolumeDTO(id = 123,idTag = 1)
ModelMapper版本: 1.1.0
P.S。您可以在另一个问题中整理类似于my answer的代码。
答案 1 :(得分:0)
对于这种映射,最好使用像mapStuct这样的AnnotationProcessor来减少代码。
它将为Mapper生成代码
@Mapper
public interface SimpleSourceDestinationMapper {
TagVolumeDTO sourceToDestination(Tag source);
Tag destinationToSource(TagVolumeDTO destination);
}
这些映射器的用法如下
private SimpleSourceDestinationMapper mapper
= Mappers.getMapper(SimpleSourceDestinationMapper.class);
TagVolumeDTO destination = mapper.sourceToDestination(tag);
请找到详细实施的链接 MapStuct