java如何将DTO映射到现有的JPA实体?
我正在尝试将Java DTO对象映射到现有的JPA实体对象,而无需执行以下操作:
public MyEntity mapToMyEntity(SomeDTO dto, MyEntity entity) {
entity.setField1(dto.getField1());
entity.setField2(dto.getField2());
...
entity.setField20(dto.getField20());
return entity;
}
到目前为止,我一直在使用像这样的ModelMapper:MyEntity entity = modelMapper.map(dto, SomeDTO.class);
,但我想做的是映射到一个现有的实体对象,而不是从DTO创建一个新的实体对象。我查阅了ModelMapper手册,没有找到如何在不创建新对象的情况下进行映射。我是否无法为可能拥有的每个实体对象手动添加每个成员变量
# 1 楼答案
您可以使用推土机映射器或gson
DozerMapper ex:
您可以查看github page以了解更多信息
# 2 楼答案
目前
ModelMapper
还支持映射到现有对象可以执行以下操作(对于伪弹簧示例):
我使用的是2.3.1版,但早期版本可能也支持此功能
# 3 楼答案
翻译自葡萄牙语
https://pt.stackoverflow.com/questions/166438/dto-assembler-como-utiliza-lo-realmente
使用模式汇编程序: 您可以通过汇编器模式将实体转换为DTO,但这是错误的(我认为),它打破了DTO的意义,DTO是传输对象的标准。请注意,它可以由多个实体组成。正确的做法是使用服务类中对象实例的集合方法,将DTO作为实体进行组装,这仅仅是因为您正确地使用了标准
但它有一种方式,即使它是错误的,它也会工作,但只有实体x DTO之间的1 x 1关联,使用番石榴函数
例如:转换转换为对象和列表
模式汇编程序:
什么样的服务会使用这些模式
现在,让我们做一个相反的过程,将一个或一个DTO列表转换为对象,但请记住,关联是1x1。要做到这一点,只需在函数的实现中反转对象,例如:
# 4 楼答案
您可以定义下一个类:
并将其用于您的需求:
# 5 楼答案
我们可以在这里使用Map Struct。 有关如何使用它的参考链接:https://www.baeldung.com/mapstruct