COMPARTE ESTE ARTÍCULO

En el desarrollo de aplicaciones Java, especialmente en aquellas que manejan grandes volúmenes de datos, es fundamental implementar un diseño que permita gestionar el acceso a las bases de datos de manera eficiente y modular. Uno de los patrones más útiles para lograr esto es el Data Access Object (DAO), que facilita la separación entre la lógica de negocios y las operaciones de acceso a datos. Este artículo explica los conceptos básicos del patrón DAO en Java, y cómo implementarlo mediante un ejemplo de gestión de trabajadores.

¿Qué es el Patrón DAO?

El patrón Data Access Object (DAO) es un patrón de diseño estructural que proporciona una capa de abstracción para las operaciones de acceso a datos. Con DAO, los desarrolladores pueden acceder y manipular datos sin preocuparse por los detalles específicos de la base de datos o el lenguaje SQL. Este enfoque favorece un código más limpio, fácil de mantener y permite que la lógica de negocio no esté acoplada a la lógica de acceso a datos.

Ventajas del Uso de DAO en Java

  • Separación de responsabilidades: La lógica de negocio no está mezclada con el código de acceso a datos, lo que facilita el mantenimiento y la comprensión del código.
  • Facilidad de cambio de base de datos: Si en el futuro se necesita cambiar de proveedor de base de datos, solo se modifica el código de la capa DAO, sin afectar la lógica de negocio.
  • Reutilización de código: Las clases DAO pueden ser reutilizadas en otros proyectos o contextos, ahorrando tiempo y esfuerzo.

Ejemplo de Implementación DAO para una Clase Trabajador

En este ejemplo, implementaremos una clase Trabajador que representa a un empleado en una organización. La capa DAO (TrabajadorDAO) se encargará de realizar las operaciones de acceso a datos, como agregar, obtener y eliminar trabajadores de la base de datos.

Paso 1: Creación de la Clase Trabajador

public class Trabajador {
    private int id;
    private String nombre;
    private String puesto;
    private double salario;

    public Trabajador(int id, String nombre, String puesto, double salario) {
        this.id = id;
        this.nombre = nombre;
        this.puesto = puesto;
        this.salario = salario;
    }

    // Getters y Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getNombre() { return nombre; }
    public void setNombre(String nombre) { this.nombre = nombre; }
    public String getPuesto() { return puesto; }
    public void setPuesto(String puesto) { this.puesto = puesto; }
    public double getSalario() { return salario; }
    public void setSalario(double salario) { this.salario = salario; }
}

Paso 2: Creación de la Interfaz TrabajadorDAO

La interfaz TrabajadorDAO define los métodos CRUD (Crear, Leer, Actualizar, Eliminar) que se implementarán en la clase DAO concreta.

import java.util.List;

public interface TrabajadorDAO {
    void agregarTrabajador(Trabajador trabajador);
    Trabajador obtenerTrabajador(int id);
    List<Trabajador> obtenerTodosLosTrabajadores();
    void actualizarTrabajador(Trabajador trabajador);
    void eliminarTrabajador(int id);
}

Paso 3: Implementación de la Clase TrabajadorDAOImpl

En esta implementación, conectamos a una base de datos MySQL (o cualquier base de datos que se esté utilizando) para realizar las operaciones de CRUD.

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class TrabajadorDAOImpl implements TrabajadorDAO {
    private final String url = "jdbc:mysql://localhost:3306/mi_base_de_datos";
    private final String user = "usuario";
    private final String password = "contraseña";

    @Override
    public void agregarTrabajador(Trabajador trabajador) {
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "INSERT INTO trabajadores (id, nombre, puesto, salario) VALUES (?, ?, ?, ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, trabajador.getId());
            ps.setString(2, trabajador.getNombre());
            ps.setString(3, trabajador.getPuesto());
            ps.setDouble(4, trabajador.getSalario());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public Trabajador obtenerTrabajador(int id) {
        Trabajador trabajador = null;
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "SELECT * FROM trabajadores WHERE id = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                trabajador = new Trabajador(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("puesto"),
                        rs.getDouble("salario")
                );
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return trabajador;
    }

    @Override
    public List<Trabajador> obtenerTodosLosTrabajadores() {
        List<Trabajador> trabajadores = new ArrayList<>();
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "SELECT * FROM trabajadores";
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                Trabajador trabajador = new Trabajador(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("puesto"),
                        rs.getDouble("salario")
                );
                trabajadores.add(trabajador);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return trabajadores;
    }

    @Override
    public void actualizarTrabajador(Trabajador trabajador) {
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "UPDATE trabajadores SET nombre = ?, puesto = ?, salario = ? WHERE id = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, trabajador.getNombre());
            ps.setString(2, trabajador.getPuesto());
            ps.setDouble(3, trabajador.getSalario());
            ps.setInt(4, trabajador.getId());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void eliminarTrabajador(int id) {
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "DELETE FROM trabajadores WHERE id = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Conclusión

El uso del patrón DAO en Java proporciona una forma organizada y eficiente de manejar el acceso a datos en aplicaciones. Al separar las operaciones de acceso a datos de la lógica de negocio, el código se vuelve más fácil de mantener y más modular. En el ejemplo, la clase TrabajadorDAOImpl implementa las operaciones de la interfaz TrabajadorDAO, permitiendo realizar operaciones CRUD en la tabla trabajadores. Este diseño permite cambios futuros en la base de datos sin afectar la lógica principal de la aplicación, lo cual es una gran ventaja en el desarrollo de software.


¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO