Hibernate Diapositiva

25
HIBERNATE

Transcript of Hibernate Diapositiva

Page 1: Hibernate Diapositiva

HIBERNATE

Page 2: Hibernate Diapositiva

Qué es un ORM (1/3)(Object relational Mapping)

Problemas al trabajar con POO + BBDD R l i lRelacionales

Dos paradigmas muy diferentesObj t t ib t i i tObjetos, atributos, asociaciones con otros objetos, herencia, UML …Columnas, claves ajenas, consultas lenguaje SQL

Page 3: Hibernate Diapositiva

Qué es un ORM (2/3)Q ( )

JavaObjectint id;String name;

SQL Table

id [int] primary keyString name;String getName()int getId()void setName(String)void setId(int)

id [int] primary key,name [varchar(50)]

( )

La función de unO/R Mapper tiene

lugar aquílugar aquí

Page 4: Hibernate Diapositiva

Qué es un ORM (3/3)Qué es un ORM (3/3)

G ti i t i d bj tGarantizar persistencia de objetos: necesario conexión JDBC + consultas SQL para cada propiedad de estos objetos

Si los objetos son grandes muy costosoSi los objetos son grandes muy costoso

Problema llamado “diferencia objeto-relacional”

Page 5: Hibernate Diapositiva

Qué es Hibernate (1/2)Qué es Hibernate (1/2)

Mapeador objeto-relacional (ORM)

Uno de los mejores

Código abiertoCódigo abierto

Popular (13000 descargas/mes)

Page 6: Hibernate Diapositiva

Qué es Hibernate (2/2)Qué es Hibernate (2/2)

API personalizada

Persistencia para JavaBeans

HQL: Hibernate Query LanguageHQL: Hibernate Query Language

Page 7: Hibernate Diapositiva

Por qué Hibernate (1/2)Por qué Hibernate (1/2)

Transparente (trabajamos con el modelo)

Poco código

No requiere contenedorNo requiere contenedor

Modelo e implementación independientes

Page 8: Hibernate Diapositiva

Por qué Hibernate (2/2)Por qué Hibernate (2/2)

Permite grandes consultas (HQL y/ó SQL)

Optimiza el acceso a los datos

Page 9: Hibernate Diapositiva

Objetivos de Hibernate (1/1)Objetivos de Hibernate (1/1)

Ventajas de las BBDD Relacionales jusando el lenguaje de POO

Desaparecer el 95% de los problemas de persistencia de datospersistencia de datos

Reducir el trabajo

Page 10: Hibernate Diapositiva

Ejemplo sencillo (1/2)Ejemplo sencillo (1/2)

Aplicación destinada a reportero TV

Almacenar eventos y patrocinadores de é téstos

Primero descargamos Hibernate y sit amos los jar en el directorio libsituamos los .jar en el directorio lib

Page 11: Hibernate Diapositiva

Ejemplo sencillo (2/2)Ejemplo sencillo (2/2)

+lib+libcglib2.jarcommons-logging.jar hibernate2.jar jta.jar odmg.jarcommons-collections.jar dom4j.jar jdbc2_0-stdext.jar j _ jlog4j.jar

Page 12: Hibernate Diapositiva

La primera clase (1/2)La primera clase (1/2)

Clase Java que describe la aplicación antes presentada. Nombre: Event.javap j

package de.gloegl.road2hibernate; public Date getDate() {return date;;

public class Event { }private String title;private Date date; public void setDate(Date date) {private Long id; this.date = date;

}public Long getId() {

return id; public String getTitle() {} return title;

}}private void setId(Long id) {

this.id = id; public void setTitle(String title) {} this.title = title;

}}}

Page 13: Hibernate Diapositiva

La primera clase (2/2)La primera clase (2/2)

setId privado; identificador único que sólo usará Hibernateusará Hibernate

id tipo Long verdadero (no tipo primitivo)id tipo Long verdadero (no tipo primitivo)

lib+lib<hibernate jars>

+srcd+de+gloegl

+road2hibernateE t jEvent.java

Page 14: Hibernate Diapositiva

El fichero de mapeo (1/4)El fichero de mapeo (1/4)

Dice a Hibernate cómo persistir la clase Java

N b E t hb lNombre: Event.hbm.xml (en nuestro caso)(e uest o caso)

Page 15: Hibernate Diapositiva

El fichero de mapeo (2/4)El fichero de mapeo (2/4)

<?xml version="1.0"?>

<!DOCTYPE hibernate mapping PUBLIC<!DOCTYPE hibernate-mapping PUBLIC"-//hibernate/hibernate Mapping DTD 2.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping><class name="de.gloegl.road2hibernate.Event" table="EVENTS">

<id name="id" column="uid" type="long"><id name id column uid type long ><generator class="increment"/>

</id><property name="date" type="timestamp"/>p p y yp p<property name="title" column="eventtitle"/>

</class></hibernate-mapping>pp g

Page 16: Hibernate Diapositiva

El fichero de mapeo (3/4)El fichero de mapeo (3/4)

Persiste la clase Event dentro de la tabla EVENTS

Id tifi d ú i ó t lIdentificador único y cómo aumentarlo

Properties atributos de clasetype y column valores por defecto

Page 17: Hibernate Diapositiva

El fichero de mapeo (4/4)El fichero de mapeo (4/4)

lib+lib<hibernate jars>

+src+de

+gloegl+road2hibernate+road2hibernate

Event.javaEvent.hbm.xml

Page 18: Hibernate Diapositiva

Siguientes pasos (1/1)Siguientes pasos (1/1)

Obtener una BBDD (MySQL, HSQLDB …)

¿Configurar Hibernate para esa BBDD XML?con un XML?

Arrancar Hibernate

Page 19: Hibernate Diapositiva

Java arranca Hibernate (1/2)Java arranca Hibernate (1/2)k d l l d2hib tpackage de.gloegl.road2hibernate;

import net.sf.hibernate.SessionFactory; import net.sf.hibernate.HibernateException; import net.sf.hibernate.cfg.Configuration; p g g ;

public class EventManager { private SessionFactory sessionFactory; public EventManager() {public EventManager() {

try { System.out.println("Initializing Hibernate");

sessionFactory = new Configuration().configure().buildSessionFactory(); y g () g () y();System.out.println("Finished Initializing Hibernate");

} catch (HibernateException e) { e.printStackTrace();

}} } public static void main(String[] args) {

EventManager instance = new EventManager(); System.exit(0);

} }

Page 20: Hibernate Diapositiva

Java arranca Hibernate (2/2)Java arranca Hibernate (2/2)

+lib+lib<hibernate jars>

+srcd+de+gloegl

+road2hibernateEvent.javaEvent.hbm.xmlEventManager.javag j

+databuild.bat

Page 21: Hibernate Diapositiva

HQL (1/3)HQL (1/3)

SQL i t d bj tSQL orientado a objetosClases y atributos vs. Tablas y columnasAsociaciones, polimorfismo

Soporta operaciones relacionalesProyección agregación gruposProyección, agregación, gruposSubconsultasF i SQLFunciones SQL

Page 22: Hibernate Diapositiva

HQL (2/3)HQL (2/3)

Consulta más simplefrom AuctionItemfrom AuctionItem

Selecciona todos los AuctionItems

Otra más complicadaselect itemselect itemfrom AuctionItem item

join item.bids bidh it d i ti lik ‘ %’where item.description like ‘program%’

and bid.amount > 100

Selecciona todos los AcutionItems con un atributo bid > 100 y una descripción que empiece por “program”

Page 23: Hibernate Diapositiva

HQL (3/3)HQL (3/3)

Proyecciónselect item description bid amountselect item.description, bid.amount

from AuctionItem itemjoin item.bids bidj

where bid.amount > 100order by bid.amount desc

Obtiene la descripción y la cantidad de todos los AuctionItems con un atributo bid > 100AuctionItems con un atributo bid 100

Page 24: Hibernate Diapositiva

BibliografíaBibliografía

http://www.hibernate.org

http://www.programacion.com/java/tutorial/hib thibernate

Page 25: Hibernate Diapositiva

Herramientas de apoyoHerramientas de apoyo

http://xdoclet.sf.net

http://boss.bekk.no/boss/middlegen

http://www andromda orghttp://www.andromda.org