¿Qué es DAO?
DAO, en pocas palabras, se puede decir que es un patrón de diseño que nos permite facilitar la interacción entre una aplicación y la base de datos.
¿Cuál es el objetivo de usar DAO?
El principal objetivo de usar DAO es que nos ayuda a extraer y encapsular el acceso a los datos, proporcionando una interfaz coherente y aislando los detalles de cómo los datos son almacenados y recuperados.
Características
Al utilizar DAO, nos permite ocultar operaciones de bajo nivel, como son consultas SQL o simplemente conexiones a bases de datos, detrás de una interfaz sencilla y fácil de usar.
Esto significa que los detalles de la implementación no son visibles para otras partes del sistema. Al usar DAO, se separa la lógica de acceso a datos de la lógica de negocio, lo que nos permite tener un código más fácil de mantener.
¿Cómo funciona DAO?
Interfaz
La parte de la interfaz nos permite definir las operaciones que el DAO puede realizar, como por ejemplo:
- Guardar
- Actualizar
- Eliminar
- Consultar
Implementación
La clase concreta de DAO implementa los métodos que se definieron anteriormente en la interfaz. En esta parte, específicamente, ya se empieza a implementar lo que son:
- Consultas SQL
- Conexión a la base de datos
- Transformación de resultados en objetos
Uso en la lógica de negocio
Si se usara algún estilo de arquitectura como lo es una basada en capas, su implementación sería en la capa de servicio, permitiendo interactuar con el DAO para realizar las operaciones que fueran declaradas en la interfaz y luego implementadas en la clase concreta.
Ejemplo en código
Imaginemos que tenemos una aplicación que maneja la información de los usuarios.
1. Crear la interfaz DAO
public interface UserDao {
void save(User user);
User findById(int id);
List<User> findAll();
void update(User user);
void delete(int id);
}
2. Crear la clase concreta para implentar la interfaz dao
public class UserDaoImpl implements UserDao {
private Connection connection;
public UserDaoImpl(Connection connection) {
this.connection = connection;
}
@Override
public void save(User user) throws SQLException {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, user.getName());
stmt.setString(2, user.getEmail());
stmt.executeUpdate();
}
@Override
public User findById(int id) throws SQLException {
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return new User(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
}
return null;
}
// ...Implementar los métodos faltantes según la lógica :)
}
Uso en la logica de negocio
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public void registerUser(User user) {
userDao.save(user);
}
public User getUser(int id) {
return userDao.findById(id);
}
}
Espero les haya servido y haya sido util cualquier comentario o correcion encantado de escuchar :)
Top comments (0)