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
- La importancia de mantener un ritmo de estudio durante las navidades.
- Cómo Multiplicar Matrices en Java: Guía Completa con Ejemplo Práctico
- Triunfos y logros de nuestra Academia SanRoque
- Herramientas Imprescindibles para Realizar Ingeniería Inversa en Java
- ¿A qué nivel de conversación en inglés estás dispuesto a llegar con Academia SanRoque?
- Cómo Resolver una Ecuación de Segundo Grado con GNU Octave
- Cuando vienes a la Academia SaRoque justo antes del examen final.
- 25N Día Internacional para la Eliminación de la Violencia contra la Mujer
- Cuando el profesor nos da la última oportunidad.
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed