1 回答

TA贡献1735条经验 获得超5个赞
@Mapper(componentModel = "spring")
interface Mapper {
@Mappings({
@Mapping(source = "street", target = "address.street"),
@Mapping(source = "city", target = "address.city")
})
Person fromPersonDTO(PersonDTO dto);
}
属性name应该自动映射,只要它具有相同的名称和嵌套级别
更新:
@Mapper(componentModel = "spring")
public abstract class Mapper {
@Autowired
private CityDAO cityDao;
@Mappings({
@Mapping(source = "street", target = "address.street"),
@Mapping(source = "city", target = "address.city")
})
Person fromPersonDTO(PersonDTO dto);
@AfterMapping
void after(@MappingTarget Person person) {
Address address = person.getAddress();
if (address != null) {
// additional null-checks might be required
address.setStreet(address.getStreet().replaceAll(" ", "_"));
address.setCity(cityDao.findByName(address.getCity()).getId();
}
}
}
请注意,为了使用自动装配的 bean,映射器必须是一个类,而不是一个接口
添加回答
举报