当前位置: 首页 > 知识库问答 >
问题:

BOJava中的DTO映射器

终安和
2023-03-14

我目前正在应用程序中手动将DTO映射到BO(反之亦然)。然而,这种方法既尴尬又笨拙。

这两种表示之间有没有好的映射器?

我的要求如下:

  • 应该支持将JPA代理转换为标识符(DTO不应该直接链接到其他DTO)。或者这个功能应该很容易实现
  • 应该基于注释,保证优于配置
  • 软标准:应该允许将多个DTO映射到一个实体(反之亦然)

谢谢你的建议。

共有3个答案

吉俊德
2023-03-14

我建议您尝试JMapper Framework。
它是一个java bean到java bean映射器,允许您使用注释和/或XML直接执行数据的传递。使用JMapper,您可以:
创建和丰富目标对象
将特定逻辑应用于映射
自动管理XML文件
实现1到N和N到1的关系
实现显式转换
应用继承的配置

宗政元青
2023-03-14

我知道这个帖子有点老了,我很确定@miguelcobain的答案很好。

我个人建议在运行时系统中使用Orika。它很强大,在运行时使用字节码生成,因此映射由生成的代码处理,而不是始终使用反射API。其他列出的库总是使用复杂的配置,而不是约定。

第二个解决方案,也是更好的一个,我认为应该是使用Selma。这个简短的库为您完成了这项工作,但它不是在运行时处理映射,而是在编译时使用注释处理器生成映射代码。所以编译器会引发映射错误,这是重构证明,您将能够看到生成的代码。

希望你能试试。

赵珂
2023-03-14

关于对象映射,我建议

  • spring 3对象映射

另外,参考这个SO答案。它有一个或多或少完整的Java对象映射器列表:https://stackoverflow.com/a/1432956/1137735

我建议的3个似乎对我更有吸引力。我认为它们都满足了你的要求。

 类似资料:
  • 我不熟悉Mapstruct,在特定用例中遇到问题 因此,如果我的来源属性hotmail.com我的目标属性应该收到“个人”,如果我的来源facebook.com我的目标应该收到“公司”。 我想用表达法,但没法绕过它。我该怎么做?

  • 我希望在我正在从事的一个项目中使用CQR,但是我目前正在努力寻找实现CQR查询端的最佳方法。基于我有限的理解,有一个瘦数据层(有时称为瘦读取层),用于查询数据库并返回DTO,其中包含应用程序UI层使用的查询结果。 由于这是一个Java的EE应用程序,我正在开发薄数据层,使用JPA使用EntityManager.createNamedQuery查询数据库,返回一个包含结果的实体,然后将其映射到DTO

  • 我有一种情况,在一个DTO中有另一个DTO,我必须映射到它对应的实体。 我正在使用mapstruct,我已经有antherEntityMapper已经存在。 如何更改EntityMapper接口,以便我可以将一个另一个EntityDTO映射到另一个Entity? 谢谢

  • 问题内容: 我是Go语言的新手,具有C#背景并且对如何构造Go应用程序感到困惑。 假设我正在构建一个REST API,它将位于数据库之上。还要说,即使完成后,鉴于业务的变迁等,此应用程序可能仍需要频繁更改。 在带有诸如Entity Framework和DTO之类的工具的C#中,我通过从控制器给出的结果中抽象出数据库来缓解此问题。如果更改数据库中一堆字段的名称,则可能必须更改数据库访问逻辑,但是希望

  • 我的域名: 我的DTO: 我的地图绘制程序如下所示: 但是,我得到了以下错误: 目标名称“Framework.system”的类型Framework中的未知属性“system”。你是说“框架外部化”吗?目标名称为“Framework.availability”的Framework类型中的未知属性“availability”。你是说“框架外部化”吗?

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co