DEV Community

CarlosMario123
CarlosMario123

Posted on

DAO (Data access object)

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

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 :)
}

Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode

Espero les haya servido y haya sido util cualquier comentario o correcion encantado de escuchar :)

Top comments (0)