Anda di halaman 1dari 65

Visin

Poder aportar al desarrollo del Pas usando tecnologa


Java.
CJava, siempre para
apoyarte.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

CJava 2015
Architect

Expert

Developer

Mobile

Programmer
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Temas:

Introduccin a ORM. Acerca de la necesidad del mapeo relacional objetos.


Estrategias de persistencia. Mecanismos de persistencia, en
particular persistencia en archivos y persistencia en bases de datos relacionales
u orientados a objetos.
Motor de persistencia Hibernate. Arquitectura: Estados de instancias, sesiones
contextuales; beneficios de usar este framework de persistencia.
Configuracin: Configuracin programtica. Mapeo de Entidades con archivos
hbmxml. Configuracin programtica. Estrategias de generacin de Pks.
Obteniendo Session Factory. Pool de conexiones con c3po. Configuracin de
generacin de Primary Keys. Mapeo de asociaciones. Arquitectura y
configuracin. Flavors: anotaciones vs XML. Mapping O/R. Configuracin bsica.
Relaciones: OneToMany, ManyToOne, ManyToMany, OneToOne. Entender
Cascade y Fetch.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Introduccin a
ORM
Gustavo Coronel
gcoronel@cjavaperu.com

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Porqu usar un ORM en nuestra aplicacin?

Una parte importante de cualquier aplicacin es la capa de persistencia.

Poder acceder y manipular data de una base de datos relacional.

ORM se encarga del problema Objetos vs BD Relacional:

La data vive en el base de datos relacional, la cual es manejado por tablas(con registros
y columnas).

Nosotros queremos trabajar con objetos, no con registros y columnas de tablas.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

BD
Relacional

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

Modelo de
Clases

CJava, siempre para apoyarte.

Hibernate
Edwin Maravi
emaravi@cjavaperu.com

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Objetivos
Al final de la sesin usted aprender:

Conceptos bsicos de Hibernate


Acerca de la arquitectura de Hibernate
Acerca de los beneficios de Hibernate
Como elaborar un archivo de mapeo.
Como elaborar el archivo de configuracin de hibernate

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Qu es Hibernate?
Es un ORM(Object Relational Mapping) para habilitar la persistencia de
POJOs.
Te permite trabajar sin verte limitado por el modelo de datos relacional. Lo que
busca es crear una base de datos orientada a objetos.

Te permite crear objetos persistentes siguiendo los conceptos de


programacin OO

Asociacin.
Herencia.
Polimorfismo.
Composicin.
Collection API para many relationship

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Recordando JDBC
Mtodo para
obtener un
listado de
recetas:

Evolucin

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Lo mismo pero en Hibernate


Mtodo para obtener un listado de recetas:

Se ve mucho mejor

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Por qu usar Hibernate?


Permite a los desarrolladores centrarse en el modelamiento de
dominio.
Performance.

Cach de objetos de alto rendimiento.


Configurable formas de cmo plantear estrategias de persistencia.

Sofisticadas facilidades para las consultas

Criteria API
Query By Example (QBE)
Hibernate Query Language (HQL)
Native SQL

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Arquitectura de Hibernate

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Arquitectura de Hibernate

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapeos Hibernate
Edwin Maravi
emaravi@cjavaperu.com

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Objetivos
Al final de la sesin usted aprender:
Cmo representar las relaciones de una base de datos
relacional en un modelo de clases con hibernate.

Many To One
One To Many
Many To Many

Sintaxis XML para la creacin de archivos de mapeo.


Distintas estrategias para la generacin de PK en una
tabla.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Temas
Mapeo para relaciones de Cardinalidad

One-To-Many
Many-To-One
Many-To-Many
One-To-One
Mapeo para relaciones de Herencia
Una sola tabla para toda la jerarqua de clases
Una tabla para cada subclase.
Una tabla por cada una de las clases del modelo.
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapeo para relaciones de cardinalidad

many-to-one
one-to-many
many-to-many
one-to-one

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
Many-to-One

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many-To-One

BD
Relacional

Modelo de
Clases

De un conjunto de muchas
compaas solo una es donde
trabaja un cliente.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many-To-One
Archivo de mapeo
De un conjunto de muchas compaas solo una es donde trabaja un cliente.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
One-To-Many

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One-To-Many Relationship
1.<set>
2.<list>
3.<array>
4.<bag>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
One-To-Many:
Usando <set>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

1. One-to-Many :
Usando <set> en el archivo de mapeo
Un evento tiene muchos expositores y oyentes
Event.hbm.xml :

>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many:
Usando Set en la Clase de Dominio
Un evento tiene muchos expositores y oyentes

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many:
Creando Objeto de Instancia

Un evento tiene muchos expositores y oyentes

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
One-To-Many:
Usando <list>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

2. One to Many:
Usando <list> en archivo de mapeo
Un Grupo tiene muchas historias
Group.hbm.xml

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many :
Usando List en la clase de Dominio
Grupo(Group) tiene muchas historias(stories)

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many:
Creando Objetos de Instancia

Group tiene muchas stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many :
Resultado despus de grabar

Tables

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
One-To-Many:
Using <array>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

3. One to Many:
Usando <array> en archivo de mapeo
Group tiene muchas stories
Group.hbm.xml

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many :
Usando un array en Clase de Dominio
Group tiene muchas stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many :
Usando un array en Clase de Dominio
Group tiene muchas stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many:
Creando un Objeto de Instancia
Group has many stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
One-To-Many:
Usando <bag>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

4. One to Many:
Usando <bag> en archivo de mapeo

Group tiene muchas stories


Group.hbm.xml

Si quieres usar un List y no quieres manejar


indexacin, entonces <bag> es la mejor opcin.
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many:
Usando un List en Clase de Dominio
Group tiene muchos stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One to Many :
Creando un Objeto de Instancia
Group tiene muchos stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
Many-To-Many

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many
Los Ponentes(Speakes) exponen en muchos Eventos(Events) y Un Evento(Event) tiene
muchos Ponentes(Speaker)
SpeakerManyToMany.hbm.xml

En este tipo de relaciones, no se crea un archivo de


mapeo para la tabla intermedia, solo se crea un archivo
para cada uno de los extremos.
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many
Un Evento tiene muchos Ponentes y Los Ponentes exponen en muchos Eventos
EventManyToMany.hbm.xml

>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many:
Clase de Dominio
Event tiene muchos speakers

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many:
Clase de Dominio

A speaker exponen en muchos events

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many:
Creando objetos de instancia
Event tiene relacin de muchos a muchos con Speaker

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Many to Many
Resultado en Tablas

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin:
Usando <map>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One-Has-Collection:
Usando <map> en el archivo de mapeo

SupportProperty class has Collection


SupportProperty.hbm.xml

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One-Has-Collection :
Clase de Dominio

Group has many stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One-Has-Collection :
Creando Objetos de Instancia

Group tiene muchos stories

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapping Inheritance
(Mapeos Basados en Herencia):
3 Maneras Diferentes

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Relacin por Herencia


Representaciones

3 maneras diferentes
Una tabla por jerarqua de clases.
Una tabla por cada subclase.
Una tabla por cada clase concreta.

Cada una de estas tcnicas tiene sus costos y beneficios.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapping Inheritance:
1 Tabla para toda una
Jerarqua de clases

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Una Tabla por Jerarqua de Clases


Modelo de datos.

Problema: Tenemos una sola tabla book, pero en nuestro modelo de dominio
contamos con 3 clases: Book, SpecialEditionBook e InternationalBook. Estas dos
ltimas clases extienden de Book
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Una Tabla por Jerarqua de Clases


Se define con el elemento <subclass>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapping Inheritance:
1 Tabla por SubClase

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Una Tabla Por SubClase

Problema: Tenemos tres tablas: book, specialeditionbook e internationalbook, y en nuestro modelo


de dominio contamos con 3 clases: Book, SpecialEditionBook e InternationalBook. Esta dos ltimas
clases extienden de Book

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Una Tabla Por SubClase


Se define con el elemento <joined-subclass>

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Mapping Inheritance:
1 Tabla para una
Concreta Clase
Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

One Table per Concrete Class


Modelo de datos:

Problema: Tenemos tres tablas: book, specialeditionbook e internationalbook, y en nuestro modelo de


dominio contamos con 3 clases: Book, SpecialEditionBook e InternationalBook. Ninguna de estas 3
clases tiene relacin entre si.

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Una Tabla para una Concreta Clase


Se define cada clase para cada tabla. Lo malo es que se repite las propiedades:

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Gracias

Av. Arenales 395 Oficina 403 405 / 43376948 3327162 / info@cjavaperu.com

CJava, siempre para apoyarte.

Anda mungkin juga menyukai