Hibernate Diapositiva

Post on 21-Apr-2015

66 views 3 download

Transcript of Hibernate Diapositiva

HIBERNATE

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

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í

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”

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)

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

API personalizada

Persistencia para JavaBeans

HQL: Hibernate Query LanguageHQL: Hibernate Query Language

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

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

Permite grandes consultas (HQL y/ó SQL)

Optimiza el acceso a los datos

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

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

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

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;

}}}

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

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)

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

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

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

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

Obtener una BBDD (MySQL, HSQLDB …)

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

Arrancar Hibernate

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);

} }

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

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

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”

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

BibliografíaBibliografía

http://www.hibernate.org

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

Herramientas de apoyoHerramientas de apoyo

http://xdoclet.sf.net

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

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