hibernate diapositiva
TRANSCRIPT
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