Proyecto de aplicación de consola que demuestra el uso de Hibernate como framework de Mapeo Objeto-Relacional (ORM) para gestionar una base de datos MySQL.
- java-hibernate-orm-example
El propósito fundamental de este proyecto es ilustrar cómo una aplicación Java puede interactuar con una base de datos relacional (MySQL) a través de un modelo de objetos. Se utiliza Hibernate para abstraer la capa de persistencia, lo que aporta beneficios clave como:
- Productividad: Se reduce el código repetitivo (boilerplate) de JDBC, SQL y la conversión manual de datos.
- Mantenibilidad: El código es más limpio y fácil de entender al operar con objetos de negocio en lugar de con sentencias SQL.
- Independencia de la Base de Datos: Gracias al dialecto de Hibernate, la aplicación puede cambiar de SGBD (Sistema Gestor de Base de Datos) con un esfuerzo mínimo.
El resultado es una aplicación de consola que sirve como ejemplo práctico de una arquitectura de N-Capas (Presentación, Lógica de Negocio, Acceso a Datos) y el uso de un ORM líder en la industria.
El proyecto implementa el patrón de diseño DAO, que separa la lógica de acceso a datos del resto de la aplicación. Cada entidad (Cliente, Coche, Venta) tiene su propio DAO (ClienteDAO, CochesDAO, VentaDAO), responsable de todas las operaciones de persistencia (CRUD) para esa entidad. Esto centraliza y organiza el código de interacción con la base de datos.
La base de datos ventaCoches en MySQL contiene tres tablas principales: CLIENTE, COCHES y VENTA, con sus correspondientes relaciones de clave foránea.
Hibernate mapea el esquema relacional a un modelo de objetos Java (POJOs). La correspondencia se define mediante ficheros de mapeo XML (.hbm.xml):
Cliente.java(Cliente.hbm.xml)public class Cliente { private int idCliente; private String dni; private String nombre; // ... otros campos private Set ventas = new HashSet(0); // Relación One-to-Many }
Coches.java(Coches.hbm.xml)public class Coches { private int idCoche; private String marca; private String modelo; // ... otros campos private Set ventas = new HashSet(0); // Relación One-to-Many }
Venta.java(Venta.hbm.xml)public class Venta { private int idVenta; private Date fechaCompra; private int precio; private Cliente cliente; // Relación Many-to-One private Coches coches; // Relación Many-to-One }
- Gestión de Entidades: Operaciones CRUD completas para
Vehículos,ClientesyVentas. - Control de Integridad Referencial: El sistema previene la eliminación de clientes o vehículos si están asociados a ventas existentes.
- Consultas Avanzadas:
- HQL: Búsqueda de clientes por ciudad y vehículos por número de plazas.
- SQL Nativo: Informe de ventas en un rango de fechas, uniendo las tres tablas.
- Ejecución de Consultas Dinámicas: Una funcionalidad segura para ejecutar sentencias
SELECTgenéricas.
| Tecnología | Versión / Tipo |
|---|---|
| Lenguaje | Java 8+ |
| Framework ORM | Hibernate 5.6.5.Final |
| Base de Datos | MySQL |
| Driver | mysql-connector-j |
| Logging | slf4j |
- JDK (versión 8 o superior).
- Servidor de base de datos MySQL.
- Eclipse IDE for Java Developers.
- Crea una base de datos en MySQL llamada
ventaCoches. - Ejecuta un script SQL (no incluido) para crear las tablas
CLIENTE,COCHESyVENTA.
- Abre el fichero
src/hibernate.cfg.xml. - Ajusta las propiedades de conexión a tu base de datos:
<property name="hibernate.connection.url">jdbc:mysql://localhost/ventaCoches</property> <property name="hibernate.connection.username">tu_usuario</property> <property name="hibernate.connection.password">tu_contraseña</property>
- Importa el proyecto en Eclipse (
File > Import > General > Existing Projects into Workspace). - Añade las librerías del directorio
lib/al Build Path del proyecto. - Ejecuta el método
mainde la clasecom.example.practica3ad.Sistema.
Nota sobre la configuración del entorno: Si necesitas ayuda para configurar Hibernate y sus herramientas en Eclipse, puedes seguir esta guía detallada de instalación y configuración manual.
- Autor: Eduardo Díaz Sánchez
- Asignatura: Acceso a Datos, DAM
- Centro Educativo: IES Calderón de la Barca (Pinto)
Este proyecto se distribuye bajo la licencia MIT.