Download Hibernate Core – Clase 1

Document related concepts
no text concepts found
Transcript
Softlogia S.R.L.
Formación de Recursos Humanos
Hibernate Core
Instructor: Martin R. Baspineiro
Hibernate Core – Clase 1

Hibernate Core





Porque debemos conocer Hibernate?
Conceptos necesarios
Persistencia Relacional con Hibernate
Las capas de Hibernate
La Arquitectura de Hibernate






La arquitectura Mínima
La arquitectura Completa
Los Componentes de la arquitectura
Los estados de una instancia
Arquitectura de una aplicación que usa Hibernate
Practica
Hibernate Core – Clase 1

Porque debemos conocer hibernate?



Para conocer un framework que nos permita persistir
nuestros objetos de dominio en una base de datos
relacional.
Para conocer el funcionamiento de un framework de
persistencia objeto-relacional.
Para desarrollar aplicaciones java profesionales.
Hibernate Core – Clase 1

Conceptos necesarios


POJO: Plain Old Java Object. Se usa este nombre para
enfatizar que se trata de un objeto java simple, en
particular que no se trata de Enterprise Java Bean
Java Bean: se usa este nombre para identificar a un
objeto que tiene sus atributos definidos como private,
que permite el acceso a sus atributos mediante
accessors públicos, que tiene un constructor sin
argumentos y que implementa la interfaz serializable.
Hibernate Core – Clase 1

Conceptos necesarios


Thread-safe: se dice que un pedazo de código es
thread-safe, cuando es seguro de ejecutarse
concurrentemente por múltiples hilos (threads)
Single-Threaded: se dice que un pedazo de código es
single-threaded, cuando es ejecutado por un único hilo
en cualquier momento.
Hibernate Core – Clase 1

Persistencia Relacional con Hibernate


Históricamente, Hibernate ha facilitado el
almacenamiento y recuperación de objetos de dominio
java mediante el mapeo objeto-relacional.
Actualmente, Hibernate es una colección de proyectos
relacionados que permiten a los desarrolladores utilizar
modelos de dominio del estilo POJO en sus
aplicaciones.
Hibernate Core – Clase 1

Las capas de Hibernate
Hibernate Core – Clase 1

La arquitectura de Hibernate
Hibernate Core – Clase 1

La arquitectura de Hibernate

La arquitectura mínima
Hibernate Core – Clase 1

La arquitectura de Hibernate

La arquitectura completa
Hibernate Core – Clase 1

La arquitectura de Hibernate

Los componentes de la arquitectura.


SessionFactory: es una cache, inmutable y thread-safe, que
contiene los mapeos compilados de una base de datos. Es
una factoría de objetos Session. Es un cliente de
ConnectionProvider.
Session: es un objeto single-threaded de vida corta que
representa la conversación entre la aplicación y
almacenamiento persistente. Envuelve una conexión JDBC.
Es una factoría de objetos Transaction. Mantiene un cache de
objetos persistentes.
Hibernate Core – Clase 1

La arquitectura de Hibernate

Los componentes de la arquitectura.



Persistent objects and collections: son objetos single-thread
de vida corta que tienen un estado persistente y funciones de
negocio. Están asociados exactamente a una única Session.
Una vez que la session es cerrada serán detachados y libres
de usar por cualquier aplicación.
Transient and detached objects and collections: son objetos
de clases persistentes que no están asociados a una Session.
Transaction: es un objeto single-thread de vida corta
utilizado para especificar unidades de trabajo atómicas.
Abstrae a la aplicación de la transacción subyacente (JDBC,
JTA). Una Session puede ejecutar varias transacciones. La
demarcación de una transacción no es opcional
Hibernate Core – Clase 1

La arquitectura de Hibernate

Los componentes de la arquitectura.



ConnectionProvider: es una factoría y pool de conexiones
JDBC. Abstrae a la aplicación de los Datasource o
DriverManager subyacentes.
TransactionFactory: es una factoría para instancias de
Transaction. No esta expuesta a la aplicación, pero puede ser
extendida o implementada por el desarrollador.
Extension Interfaces: es un rango de interfaces de extensión
opcionales que el desarrollador puede utilizar para
customizar el comportamiento de la capa de persistencia.
Hibernate Core – Clase 1

Los estados posibles de una instancia

Se definen en base a su relación con el contexto de
persistencia (el objeto Session de Hibernate).



Transient: la instancia no esta asociada a ningún contexto de
persistencia. No tiene un identificador de persistencia o PK.
Persistent: la instancia esta asociada a un contexto de
persistencia. Tiene un identificador de persistencia y puede
corresponderse con un registro de la base de datos.
Detached: la instancia estuvo asociada a un contexto de
persistencia, pero el contexto de persistencia fue cerrado, o
la instancia fue serializada por otro proceso. Tiene un
identificador de persistencia y puede corresponderse con un
registro de la base de datos.
Hibernate Core – Clase 1

Arquitectura de una aplicación que usa Hibernate
Hibernate Core – Clase 1

La clase de dominio





Es una clase java.
Es un java bean o POJO.
Requiere de un constructor sin argumentos.
Es conveniente que tenga un atributo para definir el id.
Puede tener definido comportamiento, sin embargo no
es conveniente salvo excepciones.
Hibernate Core – Clase 1

El archivo de Mapeo





Esta definido en xml
Define la relación objeto relacional
Relaciona cada campo de la tabla con un atributo de la
clase de dominio.
Define las relaciones del modelo relacional como
asociaciones entre clases.
Por defecto ningún atributo de la clase de dominio es
considerado persistente.
Hibernate Core – Clase 1

El archivo de configuración





Puede ser archivo properties o un xml (recomendado)
Define el componente SessionFactory.
Define la conexión JDBC.
Define el dialecto SQL.
Define los arhivos de mapeo que utilizara.
Hibernate Core – Clase 1

Startup y Helper

Para inicializar Hibernate es util crearse una clase
HibernateUtil que nos permite obtener el contexto de
persistencia (SessionFactory)
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Hibernate Core – Clase 1

Las Implementaciones de DAOs


Son implementaciones de las interfaces definidas para
la realización de operaciones CRUD.
Una implementación de DAO con hibernate debería
tener un método como el siguiente:
private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
Hibernate Core – Clase 1

Los Servicios




Son la implementación del patrón de diseño Facade
Implementan toda la lógica de negocios
Están compuestos por las interfaces DAOS, a través de
las cuales realizan las operaciones CRUD con las
clases de dominio.
Permiten la separación por capas de la capa de modelo.
Hibernate Core – Clase 1

Practica

Realizar el ejemplo definido en el tutorial de hibernate
3.5.1