广告位联系
返回顶部
分享到

软件开发中的DTO和DAO的介绍

java 来源:互联网 作者:佚名 发布时间:2025-01-10 08:14:13 人浏览
摘要

DTO(数据传输对象)和 DAO(数据访问对象)是软件架构中的两种常用模式,尤其在基于 Java 的应用中发挥着重要作用。它们协同工作,有效地组织数据访问和传输。 DTO(数据传输对象): 用

软件开发中的 dto 和 dao

DTO(数据传输对象)和 DAO(数据访问对象)是软件架构中的两种常用模式,尤其在基于 Java 的应用中发挥着重要作用。它们协同工作,有效地组织数据访问和传输。


DTO(数据传输对象):

用途: DTO 用于在应用不同层级或进程间高效传输数据。

用例: 通过捆绑相关数据,DTO 减少了方法调用次数,并避免在数据传输过程中夹杂不必要的业务逻辑。

特点:

  • 仅包含用于存储数据的字段。
  • 除了 getter 和 setter 方法外,不包含任何业务逻辑或其他方法。
  • 可序列化,方便网络通信或 API 响应。

DTO 示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class UserDTO {

    private String username;

    private String email;

 

    public UserDTO(String username, String email) {

        this.username = username;

        this.email = email;

    }

 

    // getters and setters

    public String getUsername() { return username; }

    public void setUsername(String username) { this.username = username; }

    public String getEmail() { return email; }

    public void setEmail(String email) { this.email = email; }

}


DAO(数据访问对象):

用途: DAO 负责与数据库交互,提供执行 CRUD(创建、读取、更新、删除)操作的接口,并隐藏持久化逻辑的实现细节。

用例: DAO 将数据库操作与业务逻辑解耦,遵循单一职责原则。

特点:

  • 封装 SQL 查询或 ORM(如 Hibernate、JPA)逻辑。
  • 作为数据库层的接口。
  • 提供可复用的方法,例如 save()、findById()、delete() 等。

DAO 示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

public class UserDAO {

    private Connection connection;

 

    public UserDAO(Connection connection) {

        this.connection = connection;

    }

 

    public UserDTO getUserById(int id) throws Exception {

        String query = "SELECT username, email FROM users WHERE id = ?";

        PreparedStatement statement = connection.prepareStatement(query);

        statement.setInt(1, id);

        ResultSet resultSet = statement.executeQuery();

 

        if (resultSet.next()) {

            String username = resultSet.getString("username");

            String email = resultSet.getString("email");

            return new UserDTO(username, email);

        }

        return null;

    }

 

    public void saveUser(UserDTO user) throws Exception {

        String query = "INSERT INTO users (username, email) VALUES (?, ?)";

        PreparedStatement statement = connection.prepareStatement(query);

        statement.setString(1, user.getUsername());

        statement.setString(2, user.getEmail());

        statement.executeUpdate();

    }

}


整合:

DAO 从数据库获取数据,转换为 DTO 对象,再将 DTO 对象传递给其他层(例如服务层或控制器层)。

示例流程:

  1. 控制器层调用服务层。
  2. 服务层与 DAO 交互获取或保存数据。
  3. DAO 层获取数据,转换为 DTO,返回给服务层。

代码示例:

// 控制器

1

2

3

public UserDTO getUserDetails(int id) {

    return userService.getUserById(id);

}

// 服务

1

2

3

public UserDTO getUserById(int id) {

    return userDAO.getUserById(id);

}


优势:

  • DTO: 优化数据传输,解耦 UI 或外部 API 响应与内部实体。
  • DAO: 将数据库访问逻辑集中化,提高代码可重用性和可测试性。

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
    Tag :
相关文章
  • 在Spring Boot Web应用程序中序列化枚举

    在Spring Boot Web应用程序中序列化枚举
    枚举类型在定义应用程序域内有限且明确的值集方面非常有效,有助于避免代码中出现无效状态。 应用场景 以下以一个Spring Boot 3.3.x 和 M
  • Item记录线程安全的介绍

    Item记录线程安全的介绍
    确保并发访问安全:线程安全记录的必要性 类如何处理并发访问对于其使用者至关重要,这应被视为类契约的一部分。 错误地假设线程安全
  • 软件开发中的DTO和DAO的介绍

    软件开发中的DTO和DAO的介绍
    DTO(数据传输对象)和 DAO(数据访问对象)是软件架构中的两种常用模式,尤其在基于 Java 的应用中发挥着重要作用。它们协同工作,有效
  • 怎么使用Micronaut注释进行封装?

    怎么使用Micronaut注释进行封装?
    这种封装设计有效防止了对userId和name的直接修改,确保只有授权操作才能更改其值。 Micronaut框架的实际应用 Micronaut是一个基于JVM的现代微
  • 解决Maven无法下载2.1.7.js7版本的itext依赖问题
    问题与分析 某日忽然发现用Maven编译项目报错如下: Failed to collect dependencies at net.sf.jasperreports:jasperreports:jar:6.10.0 - com.lowagie:itext:jar:2.1.7.j
  • windows java -jar无法启动jar包简单的解决方法

    windows java -jar无法启动jar包简单的解决方法
    1. 问题 我们项目是使用nacos作为注册中心以及配置中心,我们本地使用idea 进行服务配置以及启动发现没有问题,然后我们的服务经过maven
  • 深入分析Spring Cloud负载均衡器架构选型

    深入分析Spring Cloud负载均衡器架构选型
    我们这次项目主要从RestTemplate 和 Feign 进行选型分析。 一、Spring Cloud Feign分析 Feign是另外一种客户端负载均衡实现。 我在该模块写了Feign
  • Java报错java.awt.AWTException: AWT的解决方法
    在Java图形用户界面(GUI)编程中,java.awt.AWTException是一个常见的异常,它通常与AWT(Abstract Window Toolkit)组件相关。这个异常可能在尝试进
  • Maven管理多模块应用的统一版本号实现
    在大型项目中,尤其是涉及多个子模块的Maven项目,统一管理版本号是一个棘手的问题。尤其当项目的子模块多达几十个时,手动修改每个模
  • SpringBoot增量部署发布的实现

    SpringBoot增量部署发布的实现
    由于项目依赖的jar越来越多,Springboot默认的打包方式是将整个项目打包成一个jar包,每次发布时,打包后的jar越来越大,更新一个很小的功
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计