Home >Java >javaTutorial >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:
Controller Layer: Calls the Service Layer.
Service Layer: Interacts with the DAO to fetch or save data.
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!