DEV Community

Pranav Bakare
Pranav Bakare

Posted on

2

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;
}
Enter fullscreen mode Exit fullscreen mode

}


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();
}
Enter fullscreen mode Exit fullscreen mode

}


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!

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more