Java DTO

2025年5月12日 | 阅读 5 分钟

企业应用架构模式在处理大量复杂数据方面起着至关重要的作用。它们是处理大型系统常见问题的标准化解决方案。企业应用使我们能够操作、显示和存储海量数据。在开发企业应用时,我们应该在开始之前考虑避免紧耦合并确保数据完整性/安全性。

DTO 是 **数据传输对象** 的缩写,它是一种设计模式。它是我们称之为 **EPA** 模式之一,当我们 T需要使用封装和聚合数据进行传输的对象时。DTO 类似于数据结构,但与数据结构一样,它不包含任何业务逻辑。它包含序列化和反序列化的机制。在 DTO 中,我们可以存储来自单个源或多个源的数据。我们可以存储完整数据,也可以存储源中的少量数据。

如果我们将在代码中实现 DTO,这意味着数据是在系统之间传输的。DTO 主要用于减少昂贵的远程调用次数。为了在 DTO 和任何实体对象之间转换数据,曾经定义了组合器对象,但现在我们使用 **映射器** 来转换数据。

实现数据传输对象

为了实现 DTO,让我们创建一个公开 REST API 的 Spring Boot 应用程序。通过使用该 Spring Boot 应用程序,我们可以从 H2 数据库中检索用户位置。要实现该应用程序,我们应该了解如何将 H2 数据库与 Spring Boot 集成。要了解更多关于 H2 数据库的信息,请 点击这里

Spring Initializr 是处理第一个 Spring Boot 应用程序的最简单方法之一。

DTO Java

Spring Boot CLI 是 spring initializr 的替代方案,用于开发引导应用程序。

如果我们已经有了 Spring Boot 或 maven 应用程序,我们需要在 **pom.xml** 文件中添加以下依赖项。

如果我们使用 Gradle,我们需要添加以下一行代码

让我们通过设计 User 模型来开始实现一个演示应用程序

在上面的类中,我们创建了一个带有某些用户信息(如用户名、姓名、密码和电子邮件)的 Entity,并在 user entity 和 Location entity 之间创建了 **一对多** 关系。Location Entity 如下所示

为了执行基本的 CRUD 操作,我们使用了 Spring Boot 提供的可靠的 CrudRepository

如果您不了解如何使用这些存储库,请 点击这里

现在,我们需要创建一个控制器来处理 GET 请求并返回用户位置列表。从数据库检索的用户和位置对象也将包含一些额外信息,如用户名和密码。我们只打印这些对象中必需且必要的数据,但额外数据仍然存在。

正如我们之前告诉您的,通过使用 DTO,我们可以共享源中的必需数据或完整数据。现在,我们创建 DTO 来传输必需的数据,并通过聚合它们来一起传输两个对象的数据。

UserLocationDTO.java

现在,我们的对象包含了我们想要显示给用户的所有信息。为了将这两个对象映射到一个 UserLocationDTO,我们需要一些映射工具,如 **ModelMapper** 和 **MapStruct**。这两个工具在将对象映射到单个 DTO 中起着至关重要的作用。

我们也可以手动执行转换,为此,我们需要实现一个服务来调用 UserRepository 并返回 DTO。

让我们实现服务类来将对象映射到单个 DTO。

MappingService.java

在获取了用户列表后,我们可以直接将它们转换为包含位置信息的 UserLocationDTO 对象。

注意:当用户或其他解析结果的服务调用该端点时,它会返回一个 @ResponseBody,其中包含一个 UserLocationDTO 列表。

现在,我们在 Hibernate 数据库中添加一些 Location 和 User 的虚拟数据以供测试。

  1. insert into location(id, latitude, longitude, place, des) values (1511, 30.45, 78.06 ,'Mussoorie', ' Mussoorie is one of the most popular hill stations of country India.');
  2. insert into user(id, username, fName, lName, password, location_id) values (0043, '[email protected]', Amen, 'Louis' ,'fejdbibdl', 1511);
  3. insert into user(id, username, fName, lName, password, location_id) values (1512, '[email protected]', 'Emma', 'Watson' ,'fhfwkjdfhrk', 1511);

现在,我们使用 Postman 来访问端点并测试我们的 API 端点是否正常工作。

DTO Java