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

具有业务对象、DTO和实体/域对象的数据转换模式

柴茂材
2023-03-14

在我的Spring Boot项目中,我使用Hibernate,基本上我们有三种对象

  • 在控制器层中使用的DTO对象
  • 业务对象—业务对象是我们在整个应用程序中使用的对象
  • 实体/域对象-用于JPA层

当我们准备好保存数据时,我们将业务对象转换为域/实体对象

当我们准备将其发送给客户机/控制器时,我们可以将实体对象转换为业务对象,然后将此业务对象转换为DTO对象。

理想情况下,我被告知将BOs更改为-

我们如何以有效的方式实现这一点?有人能帮忙举个例子吗?

共有2个答案

仲君昊
2023-03-14

我喜欢在我参与的所有项目中使用Mapstruct

有几件事是我最喜欢的:

  1. 显然,您在编码转换上花费的时间更少(请查看主页上的“MapStruct in 2 Minutes”(2分钟内映射结构)
  2. 如果类中要转换的属性名与要转换的属性名相同,则编写的代码更少
  3. 它与spring集成得很好,所以您不需要声明任何bean或其他东西,只需指定它是“spring”组件模型
  4. 您有多种方法来映射实体—例如,使用DTO中的值创建新的、更新现有的实体
  5. 子对象也很容易映射。它有一个内部机制,试图在其他映射器中选择正确的映射器方法。或者您可以自己指定其名称

不过,您也可以查看ModelMapper。非常相似的库,但我自己很少使用。所以我不能提出任何特别的建议。

颛孙麻雀
2023-03-14

对于这项任务没有任何银弹,但你可以考虑使用模型映射器;这就是一个简单的例子https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

 类似资料:
  • 我继承了一个用Java编写的应用程序,该应用程序使用JPA访问数据库。该应用程序使用了一种我以前从未遇到过的设计模式,并且我会真正了解为什么使用此模式的一些指导。与许多应用程序一样,我们有一个前端、中间件和后端数据库。数据库通过 DAO 访问。DAO上的每个方法都加载一个实体DTO,它只是一个POJO,除了获取器和设置器之外什么都没有,然后该实体DTO被传递到具有更改实体状态的其他方法的实体中。示

  • 问题内容: 软件体系结构中的域对象和域服务是什么?我不熟悉它们,或者它们与业务逻辑层有何不同? 问题答案: 不同的人以不同的方式使用这些术语,但这是我的看法: 1)“业务”和“域”大致是同义词。“域”更为通用,因为它不会假设您正在编写业务应用程序。因此,如果我们正在编写科学应用程序或游戏,则可能更喜欢将代码的相关部分称为“域”代码,而不是“业务”代码。因此,在本说明的其余部分中,我将使用“域”,因

  • 问题内容: 我想将对象数组转换为javascript中具有键值对的对象。 我如何将其转换为诸如 我希望大多数浏览器都支持它。 问题答案: 您可以使用和传播语法来创建具有给定对象数组的单个对象。

  • 我是Mapstruct的新手,我正在努力正确理解它。 我想实现的是从DTO字符串参数(carModel)转换为他的实体,使用服务和存储库进行检索。 问题是Mapstruct生成的Mapper类正在尝试向Service类注入注释,但它不起作用。服务为空。 这是我的课程: 类: 类: DTO和实体类: 构建工作正常,但当我尝试使用Mapper时,应用程序停止。它说carModelService是空的。

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不

  • 我们正在用SpringBoot创建RESTAPI。我们的项目中有三层(存储库、服务和控制器)。 假设我有GetUser api在我的控制器返回对象。 是否返回对象,还是返回对象,并在控制器中转换为对象?哪种方法更好? 简而言之,域对象到DTO对象的转换,应该在服务层还是控制器层进行?