You are on page 1of 22

17/06/2012

Taller de Desarrollo Web en Java


Hibernate

Introduccin
Introduccin a Hibernate

Introduccin
En cualquier aplicacin (mediana o grande) se necesitan mecanismos para persistir sus datos.

Esto requiere elementos especficos que no se relacionan directamente con la lgica de la aplicacin.

17/06/2012

Introduccin
Adems, estos requerimientos incluyen nuevos elementos de diseo que deben ser tomados en consideracin.
Manejador de la base de datos Separacin del modelo de los dems componentes Utilizar DDL y DML (Data Definition/Manipulation Language) Concurrencia Integridad

Soluciones
Patrones de diseo
Strategy para intercambiar el mtodo de acceso a los datos en diferentes lugares Adapter para unificar la heterogeneidad entre DBMS Facade para proveer una interfaz simplificada de los mtodos de acceso y manipulacin de los datos

Perodos mundos diferentes

Modelos relacionales

Modelos orientados a objetos

17/06/2012

No es lo mismo
UPDATE alumno SET carrera=ITC WHERE matricula=a01211143 (sin lgica)

Alumno a = new Alumno(,a01211143,); a.setCarrera(ITC); (sin persistencia)

No es lo mismo
Tablas (teora de conjuntos)

Objetos (teora de grafos)

Mejor aun combinando mundos


Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection (URL,username,password); Statement stat = con.createStatement(); ResultSet result = stat.executeQuery(sql); stat.close(); con.close();

17/06/2012

Complicado
Se puede
Realizar lgica en el modelo (stored procedures) ayudara a evitar la repeticin de cdigo.

Realizar persistencia en el cdigo podra ayudar a tener control sobre los datos de la aplicacin.

Complicado
Se puede
Cambiar el tipo de la base de datos a una base orientada a objetos Usar serializacin para persistir objetos

O mejor
Se puede
Separacin de responsabilidades
Lgica: Objetos Persistencia: Modelo relacional

Se necesita una transformacin entre los dos.

17/06/2012

ORM: Mapeo Objeto-Relacional


Es un mapeo automatizado y transparente que provee persistencia para los objetos de una aplicacin hacia las tablas de una base de datos. Se utilizan metadatos para describir las equivalencias entre los dos modelos.

Componentes de ORM
Un API para implementar operaciones bsicas (altas, bajas, cambios) Un lenguaje para especificar consultas sobre clases y objetos Definiciones para especificar los metadatos del mapeo Herramientas para especificar optimizaciones

ORM

Objetos POO ORM

SQL Modelo relacional

17/06/2012

Tipos de ORM
Relacional puro
Uso de stored procedures para realizar el mapeo

Mapeo ligero
Mapeo manual realizado por cdigo que ejecuta SQL

Mapeo medio
Se utilizan objetos simples que son transformados por mecanismos automatizados

Mapeo completo
Permiten relaciones de composicin, herencia y polimorfismo

Cuestiones de diseo
Se debe cuidar
Cmo se disean los metadatos y las clases Cmo se har el mapeo de las jerarquas de clases Relacin entre identidad de objetos e identidad de registros Ciclo de vida de los objetos Herramientas para bsqueda y ordenamiento Eficiencia en consultas de datos con asociaciones

Cuestiones de diseo
Adems
Transacciones Concurrencia

17/06/2012

Hibernate
Introduccin a Hibernate

Hibernate
Es una herramienta para ORM

Permite la definicin del mapeo entre clases en Java y bases de datos relacionales

Hibernate
Se obtiene de

http://www.hibernate.org

17/06/2012

Hibernate
Las bibliotecas ms importantes son
zip/lib/required/*.jar

Ejemplo
Se trabajar con un ejemplo de mapeo entre una clase y una tabla

Alumno

Alumno

POO

Hibernate

MySQL

La base de datos
Contiene una sola tabla
Alumno
Matricula: int(10) (id) Nombre: varchar(100) Edad: int(2) Carrera: varchar(3)

17/06/2012

Ambiente OO
Una sola clase para el mapeo
Alumno
Estado Matricula: int Nombre: String Edad: int Carrera: String Comportamiento Setters y getters Se necesita un constructor vaco

Hibernate
El mapeo se realiza por medio de metadatos descritos en un archivo XML Dos elementos
Descripcin del ORM Descripcin de la conexin a la base de datos y elementos que la conforman

Metadatos del ORM


Introduccin a Hibernate

17/06/2012

Metadatos del ORM


Provee una manera de identificar la relacin existente entre los campos de una tabla en una base de datos y su representacin como parte del estado de objetos.

Archivo

NombreClase.hbm.xml

Encabezado
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration3.0.dtd">

10

17/06/2012

Elemento raiz
<hibernate-mapping> </hibernate-mapping>

Definir una clase


Indica
El nombre totalmente calificado de la clase La tabla a la que hace referencia en el mapeo El identificador El estado del objeto <class> </class>

Atributos de <class>
name: el nombre calificado de la clase

table: la tabla a la que hace referencia en el mapeo

11

17/06/2012

El identificador
Define
El nombre de la propiedad en el estado El tipo de la propiedad en el estado El nombre de la columna en la tabla <id name=.. type= column=.. />

Tipos de datos

http://docs.jboss.org/hibernate/orm/4.1/devguide/enUS/html_single/#d5e2280

Otros miembros del estado


Define
El nombre de la propiedad en el estado El tipo de la propiedad en el estado El nombre de la columna en la tabla <property name= type= column= />

12

17/06/2012

Metadatos de la conexin
Introduccin a Hibernate

Archivo

hibernate.cfg.xml

La conexin
Encabezado
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration3.0.dtd">

13

17/06/2012

Elemento raiz
<hibernate-configuration> </hibernate-configuration>

SessionFactory
Ayudar a crear la conexin y a administrar el mapeo <session-factory> </session-factory>

Propiedades de la conexin
1. 2. 3. 4.

<property name="connection.driver_class></property> <property name="connection.url></property> <property name="connection.username></property> <property name="connection.password"></property>

14

17/06/2012

Especificacin del dialecto


Permite definir la impementacin especfica de SQL del manejador de la base de datos. Subclase de la clase org.hibernate.dialect.Dialect <property name="dialect"></property>

Metadatos de ORM
Especifican las rutas de los archivos XML en los que se encuentran las especificaciones de ORM <mapping resource=archivo.xml"/>

El programa
Introduccin a Hibernate

15

17/06/2012

El programa
Para juntar estos dos mundos se debe
Conectarse a la base de datos Realizar el mapeo inicial Cargar objetos en memoria Hacer los mapeos necesarios segn la aplicacin

Primeros tres pasos


SessionFactory sessionFactory = new Configuration() .configure() .buildSessionFactory();

Persistencia
La persistencia se hace por medio de objetos Session que manejan transacciones

Session session = sessionFactory.openSession(); session.close()

16

17/06/2012

Transacciones
session.beginTransaction(); session.getTransaction().commit();

Altas
Alumno a = new Alumno(); a.setMatricula("11111"); a.setNombre("Primer alumno"); a.setEdad(20); a.setCarrera("ITC"); session.save(a);

Bajas

session.delete(a)

17

17/06/2012

Cambios

a.setNombre(Alumno cambiado); session.saveOrUpdate(a);

Consultas por objeto

Alumno al = session.get(Alumno.class,11111);

Consultas por clase


List result = session.createQuery( "from Alumno" ).list(); for ( Alumno al : (List<Alumno>) result ) { System.out.println( "Alumno (" + al.getNombre() + ") : " + al.getMatricula() ); }

18

17/06/2012

from Alumno
HQL
Lenguaje de consultas de Hibernate Permite la consulta sobre un conjunto de objetos. http://docs.jboss.org/hibernate/orm/4.1/devguide/enUS/html_single/#d5e1033

Hibernate y NetBeans
Introduccin a Hibernate

Fcil pero no
Para mapear una base de datos completa se necesita
Crear las clases para cada tabla/relacin Crear archivos de metadatos para el ORM Cuidar los elementos relacionados
Cmo se representan las relaciones?

19

17/06/2012

Generalmente

En todo proyecto, se modela la base y se crea en el manejador.

Generalmente

Si esto se tiene, se puede automatizar el proceso de creacin de objetos y archivos de metadatos con NetBeans.

Proceso
Crear conexin a base de datos como servicio Hibernate configuration wizzard Hibernate reverse engineering wizzard Hibernate mapping files and POJOs from database wizzard

20

17/06/2012

Hibernate configuration wizzard

Crea un archivo de configuraciones para la conexin a la base de datos

Hibernate reverse engineering wizzard

Crea un archivo de configuraciones que indicar para qu tablas de la base de datos se crearn los archivos de configuracin.

Hibernate mapping files and POJOs from database wizzard

Crea, finalmente, los archivos de metadatos y las clases con base en las tablas y las relaciones encontradas en el modelo relacional.

21

17/06/2012

Para esto

Se debe tener mucho cuidado en el diseo de la base de datos para que el ORM sea correcto.

Dudas

22