Home >Java >javaTutorial >DTO & DAO in Software Development

DTO & DAO in Software Development

Barbara Streisand
Barbara StreisandOriginal
2025-01-09 22:10:41787browse

DTO & DAO in Software Development

DTO (Data Transfer Object) and DAO (Data Access Object) are key design patterns often used in software development, particularly in Java-based applications. Here's an explanation of each and how they relate:


DTO (Data Transfer Object):

Purpose: DTO is a simple object designed to transfer data between layers or processes in an application.

Use Case: It is often used to encapsulate data in a way that minimizes the number of method calls (by bundling related data) and ensures no unnecessary business logic resides within it.

Characteristics:

Contains fields to store data.

No business logic or methods except getters and setters.

Can be serialized for network communication or API responses.

Example of DTO:

public class UserDTO {
private String username;
private String email;

// Constructor
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 (Data Access Object):

Purpose: DAO is responsible for interacting with the database. It provides methods to perform CRUD (Create, Read, Update, Delete) operations on a data source, abstracting the persistence logic.

Use Case: It separates the database operations from the business logic, adhering to the Single Responsibility Principle.

Characteristics:

Encapsulates SQL queries or ORM (like Hibernate, JPA) logic.

Interfaces with the database layer.

Provides reusable methods like save(), findById(), delete(), etc.

Example of DAO:

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

}


Integration:

In an application, a DAO retrieves data from the database, converts it into DTO objects, and sends these to other layers (like services or controllers).

Example Flow:

  1. Controller Layer: Calls the Service Layer.

  2. Service Layer: Interacts with the DAO to fetch or save data.

  3. DAO Layer: Fetches data, converts it into DTO, and returns it.

Code Example:

// Controller
public UserDTO getUserDetails(int id) {
return userService.getUserById(id);
}

// Service
public UserDTO getUserById(int id) {
return userDAO.getUserById(id);
}


Benefits:

DTO: Optimizes data transfer and decouples UI or external API responses from internal entities.

DAO: Centralizes database access logic, making it reusable and testable.

Let me know if you'd like a deeper explanation or examples!

The above is the detailed content of DTO & DAO in Software Development. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn