Hibernate es un framework de persistencia de datos que mapea objetos de Java a tablas de bases de datos, manejando queries, recuperación de datos y otras tareas comunes de persistencia. Permite mapear clases a través de archivos XML o anotaciones, y brinda una sesión para crear, leer, actualizar y eliminar entidades de forma transparente al cambiar el manejador de base de datos.
2. Hibernate
Hibernate es un framework de persistencia para mapeo
objeto/relacional para ambientes Java.
No solo se encarga del mapeo de clases Java a tablas de la
base de datos (y de regreso), sino que también maneja los
queries y recuperación de datos, lo que puede reducir de
forma significativa el tiempo de desarrollo.
3. Hibernate (2)
Hibernate se encarga de alrededor del 80% de las tareas
comunes relacionadas con la persistencia de datos,
manejando todos los problemas relativos con la base de
datos particular con la que estemos trabajando, de forma
transparente para nosotros como desarrolladores.
4. Hibernate (3)
Si cambiamos el manejador de base de datos no será
necesario que modifiquemos todo el SQL que ya
teníamos para adaptarse al SQL que maneja la nueva
base de datos. Solo será necesario modificar una
línea en un archivo de configuración de Hibernate, y
este se encargará del resto.
5. Mapeos con Hibernate
Existen dos formas en las que es posible realizar los
mapeos:
• Con archivos de mapeo en XML
• Con Anotaciones
6. Archivo de Configuración hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD
3.0//EN"
"http://www.hibernate.org/dtd/hibernate-
configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Aquí va nuestra configuración -->
</session-factory>
</hibernate-configuration>
7. Configuración de la Conexión
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost/curso_hibernate
</property>
<property name="connection.username">usuario</property>
<property name="connection.password">password</property>
<property name="connection.pool_size">1</property>
8. Propiedades Opcionales en el archivo
de configuración
<property name="dialect">
org.hibernate.dialect.MySQL5Dialect
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
9. ¿Crear o no crear?
<property name="hbm2ddl.auto"></property>
• validate: Valida el esquema, no modifica la base de
datos.
• update: Actualiza el esquema en caso de que haya
cambios.
• create: Crea nuevamente el esquema al inicio de la
sesión, eliminando los datos que se encuentren en este.
• create-drop: Crea el esquema al inicio de la sesión
y lo elimina al final de este.
10. Clase a almacenar
public class Contacto implements Serializable
{
private long id;
private String nombre;
private String email;
private String telefono;
public Contacto()
{
}
public Contacto(String nombre, String email, String telefono)
{
this.nombre = nombre;
this.email = email;
this.telefono = telefono;
}
//Getters y Setters
}
12. Session
La manera en la que nuestra aplicación interactúa con
Hibernate es a través de una instancia de
org.hibernate.Session.
El tiempo de vida de una sesión está atado a una
transacción lógica en la base de datos (una transacción
lógica puede abarcar varias transacciones físicas en la
base de datos).
Proporciona métodos para crear, leer, actualizar y
eliminar entidades.
13. Obteniendo una sesión
public class HibernateUtil{
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory =
new Configuration().configure().buildSessionFactory();
} catch (HibernateException he) {
System.err.println("Ocurrió un error en la
inicialización de la SessionFactory: " + he);
throw new ExceptionInInitializerError(he);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
18. Entidades con Anotaciones
@Entity
public class Contacto implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
private String email;
private String telefono;
//Demas elementos de la clase
}