java
主页 > 软件编程 > java >

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

2025-01-10 | 佚名 | 点击:

软件开发中的 dto 和 dao

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


DTO(数据传输对象):

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

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

特点:

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 将数据库操作与业务逻辑解耦,遵循单一职责原则。

特点:

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);

}


优势:

原文链接:
相关文章
最新更新