Hibernate - Departamento de Lenguajes y Sistemas Informáticos

Anuncio
Tiempo: ?h
Hibernate
Departamento de
Lenguajes y Sistemas Informá
Informáticos
Versión original: Autor (mes 200?)
Última revisión: Autor (mes 200?); descripción cambios.
escuela técnica superior
de ingeniería informática
Grupo de Ingenierí
Ingeniería del Software
Febrero 2007
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Capa de Persistencia (Hibernate
(Hibernate))
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
– Trabaja con POJO’s
– Framework ligero
Adiós servidor de aplicaciones
– No es una especificación pero es el más usado
– ORM (Object/Relation Mapping)
– Mapeo en ficheros independientes(.hbm.xml)
– Hibernate.cfg.xml
– Clases java para trabajar con BD’s
– ¿Herramienta para generar esto automáticamente?
– HibernateTools
Sevilla, abril de 2007
Grupo de Ingeniería del Software
1
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• POJO’
POJO’s
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
– Representan el Modelo del dominio
– Muchas veces, tambié
también los datos a almacenar
– Implementació
Implementación
• Constructor sin pará
parámetros
• Atributos privados con sus get/
get/set
• Relaciones como referencias y Collections (1 y *
respectivamente)
• Enumeraciones y componentes como referencias
• Métodos de negocio (los dejaremos fuera)
• Serializable,
Serializable, HashCode y Equals
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Ejemplo
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
Sevilla, abril de 2007
Grupo de Ingeniería del Software
2
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
public
Serializable
publicclass
classPersona
Personaimplements
implementsHibernate
Serializable
{{
private
Long
id;
;
id
private Long id;
private
privateString
Stringnombre;
nombre;
private
privateint
intedad;
edad;
private
;
direccionTrabajo
privateDireccion
DirecciondireccionTrabajo;
direccionTrabajo;
private
;
direccionCasa
privateDireccion
DirecciondireccionCasa;
direccionCasa;
private
> vehiculos
>();
Collection<Vehiculo
HashSet<Vehiculo
privateCollection<Vehiculo>
Collection<Vehiculo>
vehiculos==new
newHashSet<Vehiculo>();
HashSet<Vehiculo>();
public
(){ return
; }}
getId
this.id
publicLong
LonggetId(){
getId(){
returnthis.id;
this.id;
public
){ this.id
; }}
id
id
publicvoid
voidsetId(Long
setId(Longid){
id){
this.id==id;
id;
public
(){ return
; }}
getEdad
this.edad
publicint
intgetEdad(){
getEdad(){
returnthis.edad;
this.edad;
public
publicvoid
voidsetEdad(int
setEdad(intedad){
edad){this.edad
this.edad==edad;
edad;}}
public
(){ return
; }}
getNombre
this.nombre
publicString
StringgetNombre(){
getNombre(){
returnthis.nombre;
this.nombre;
public
){ this.nombre
; }}
nom
nom
publicvoid
voidsetNombre(String
setNombre(Stringnom){
nom){
this.nombre==nom;
nom;
public
() {{return
; }}
getDireccionTrabajo
this.direccionTrabajo
publicDireccion
DirecciongetDireccionTrabajo()
getDireccionTrabajo()
returnthis.direccionTrabajo;
this.direccionTrabajo;
public
Direccion d)
publicvoid
voidsetDireccionTrabajo
setDireccionTrabajo((Direccion
d){{this.direccionTrabajo
this.direccionTrabajo==d;
d;}}
public
() {{return
; }}
getDireccionCasa
this.direccionCasa
publicDireccion
DirecciongetDireccionCasa()
getDireccionCasa()
returnthis.direccionCasa;
this.direccionCasa;
public
Direccion d)
publicvoid
voidsetDireccionCasa
setDireccionCasa((Direccion
d){{this.direccionCasa
this.direccionCasa==d;
d;}}
public
> getVehiculos()
() {return
return this.vehiculos;}
;}
Collection<Vehiculo
getVehiculos
{{return
this.vehiculos
publicCollection<Vehiculo>
Collection<Vehiculo>
getVehiculos()
this.vehiculos;}
public
> vehiculos){
){
setVehiculos(Collection<Vehiculo
vehiculos
publicvoid
voidsetVehiculos(Collection<Vehiculo>
setVehiculos(Collection<Vehiculo>
vehiculos){
this.vehiculos
;
vehiculos
this.vehiculos==vehiculos;
vehiculos;
}}
public
publicvoid
voidaddVehiculo(Vehiculo
addVehiculo(Vehiculovehiculo)
vehiculo){{
this.vehiculos.add(vehiculo);
);
this.vehiculos.add(vehiculo
this.vehiculos.add(vehiculo);
/*vehiculo.setPersona(this
vehiculo.setPersona(this);*/
);*/
/*
/*vehiculo.setPersona(this);*/
}}
public
){…
…}
object
publicboolean
booleanequals(Object
equals(Objectobject){
object){…}
public
(){…
…}
hashCode
publicint
inthashCode(){
hashCode(){…}
}}
Hibernate
• Mapeo de clases
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
<?xml
-8"?>
encoding="UTF
<?xmlversion="1.0"
version="1.0"encoding="UTFencoding="UTF-8"?>
<!DOCTYPE
-mapping PUBLIC
-//Hibernate/Hibernate
hibernate
""-//Hibernate/Hibernate
<!DOCTYPEhibernatehibernate-mapping
PUBLIC"Mapping
DTD
3.0//EN"
Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping"http://hibernate.sourceforge.net/hibernate
mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate
<hibernate-mapping>
<class
com.garage.Persona"" table="PERSONA"
>
name="
<classname="com.garage.Persona
name="com.garage.Persona"
table="PERSONA"……>
<id
java.lang.Long"" unsaved-value="null">
type="
unsaved
<idname="id"
name="id"type="java.lang.Long
type="java.lang.Long"
unsaved-value="null">
<column
-type="BIGINT"/>
sql
<columnname="ID"
name="ID"sqlsql-type="BIGINT"/>
<generator
<generatorclass="native">
class="native">
</generator>
</generator>
</id>
</id>
<property
nombre"" type="java.lang.String
java.lang.String">
">
name="
type="
<propertyname="nombre
name="nombre"
type="java.lang.String">
<column
name="NOMBRE"
notnull="true"
unique="false"
not
<column name="NOMBRE" not-null="true" unique="false"
sql-type="VARCHAR(255)"/>
sql
sql-type="VARCHAR(255)"/>
</property>
</property>
<property
edad"" type="int
int““>
name="
type="
<propertyname="edad
name="edad"
type="int“>
<column
-null="true" unique="false"
not
sql
<columnname="EDAD"
name="EDAD"notnot-null="true"
unique="false"sqlsqltype="INTEGER"/>
type="INTEGER"/>
</property>
</property>
</class
class>
>
</
</class>
</hibernate
hibernate--mapping>
</
mapping>
</hibernate-mapping>
Sevilla, abril de 2007
Grupo de Ingeniería del Software
3
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Mapeo de Relaciones
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
– En el fichero Persona.hbm.xml :
<set
vehiculos"" order-by="PERSONA_FK“
name="
order
by="PERSONA_FK“>
<setname="vehiculos
name="vehiculos"
order-by="PERSONA_FK“>
<key
foreignkey="VEHICULO_PERSONA_FKC">
foreign
<key foreign-key="VEHICULO_PERSONA_FKC">
<column
-type="BIGINT"/>
sql
<columnname="PERSONA_FK"
name="PERSONA_FK"sqlsql-type="BIGINT"/>
</key>
</key>
<one-tocom.garage.Vehiculo"/>
"/>
<one
to-many class="com.garage.Vehiculo
class="
<one-to-many
class="com.garage.Vehiculo"/>
</set
set>
>
</
</set>
– En Vehiculo.hbm.xml :
<many-to“
<many
to-one name="persona“
name="persona
<many-to-one
name="persona“
class="com.garage.Persona
com.garage.Persona""
class="
class="com.garage.Persona"
foreign-key="VEHICULO_PERSONA_FKC">
foreign
foreign-key="VEHICULO_PERSONA_FKC">
<column
-null="true" sqlnot
sql
<columnname="PERSONA_FK"
name="PERSONA_FK"notnot-null="true"
sqltype="BIGINT"/>
type="BIGINT"/>
</many
many--to</
to-one>
one>
</many-to-one>
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Mapeo de Componentes
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
<component
direccionCasa"" class="
.
name="
com.garage
<componentname="direccionCasa
name="direccionCasa"
class="com.garage.
com.garage.
Direccion">
">
Direccion
Direccion">
<property
calle"" type="java.lang.String
java.lang.String">
">
name="
type="
<propertyname="calle
name="calle"
type="java.lang.String">
<column
name="DIRECCION_CASA_CALLE"
notnot
<column name="DIRECCION_CASA_CALLE" notnull="true"
-type="VARCHAR(255)"/>
sql
null="true"unique="false"
unique="false"sqlsql-type="VARCHAR(255)"/>
</property>
</property>
<property
java.lang.String">
">
type="
<propertyname="ciudad"
name="ciudad"type="java.lang.String
type="java.lang.String">
<column
name="DIRECCION_CASA_CIUDAD"
notnot
<column name="DIRECCION_CASA_CIUDAD" notnull="true"
-type="VARCHAR(255)"/>
sql
null="true"unique="false"
unique="false"sqlsql-type="VARCHAR(255)"/>
</property>
</property>
<property
codpost"" type="java.lang.String
java.lang.String">
">
name="
type="
<propertyname="codpost
name="codpost"
type="java.lang.String">
<column
not
<columnname="DIRECCION_CASA_CODPOST"
name="DIRECCION_CASA_CODPOST"notnotnull="true"
-type="VARCHAR(255)"/>
sql
null="true"unique="false"
unique="false"sqlsql-type="VARCHAR(255)"/>
</property>
</property>
</component>
</component>
Sevilla, abril de 2007
Grupo de Ingeniería del Software
4
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Mapeo de Herencia (Una tabla por clase concreta)
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
<class
com.garage.Moto"" table="MOTO"
name="
dynamic
<classname="com.garage.Moto
name="com.garage.Moto"
table="MOTO"dynamicdynamicinsert="false"
dynamicupdate="false">
dynamic
insert="false" dynamic-update="false">
<id
java.lang.Long"" unsaved-value="null">
type="
unsaved
<idname="id"
name="id"type="java.lang.Long
type="java.lang.Long"
unsaved-value="null">
<column
-type="BIGINT"/>
sql
<columnname="ID"
name="ID"sqlsql-type="BIGINT"/>
<generator
<generatorclass="native">
class="native">
</generator>
</generator>
</id>
</id>
<property
“modelo"
int">
">
name=
modelo" type="int
type="
<propertyname=“
name=“modelo"
type="int">
<column
“MODELO" not-null="true" unique="false"
name=
not
<columnname=“
name=“MODELO"
not-null="true"
unique="false"
sql-type="INTEGER"/>
sql
sql-type="INTEGER"/>
</property>
</property>
<many-tocom.garage.Persona""
<many
to-one name="persona"
class="
<many-to-one
name="persona"class="com.garage.Persona
class="com.garage.Persona"
foreign-key="VEHICULO_PERSONA_FKC" >>
foreign
foreign-key="VEHICULO_PERSONA_FKC"
<column
-null="true" sqlnot
sql
<columnname="PERSONA_FK"
name="PERSONA_FK"notnot-null="true"
sqltype="BIGINT"/>
type="BIGINT"/>
</many-to</many
to-one>
</many-to-one>
<property
“permiteSidecar"
“boolean">
name=
permiteSidecar" type=“
type=
boolean">
<propertyname=“
name=“permiteSidecar"
type=“boolean">
<column
“PERMITE_SIDECAR" not-null="true"
name=
not
<columnname=“
name=“PERMITE_SIDECAR"
not-null="true"
unique="false"
-type="VARCHAR(255)"/>
sql
unique="false"sqlsql-type="VARCHAR(255)"/>
</property
property>
>
</
</property>
</class
class>
>
</
</class>
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
• Mapeo de Herencia (Una tabla por jerarquí
jerarquía de
clases)
<class
com.garage.Vehiculo"" table="VEHICULO"
name="
<classname="com.garage.Vehiculo
name="com.garage.Vehiculo"
table="VEHICULO">>
<id
java.lang.Long"" unsaved-value="null">
type="
unsaved
<idname="id"
name="id"type="java.lang.Long
type="java.lang.Long"
unsaved-value="null">
<column
-type="BIGINT"/>
sql
<columnname="ID"
name="ID"sqlsql-type="BIGINT"/>
<generator
<generatorclass="native">
class="native">
</generator>
</generator>
</id>
</id>
<discriminator
<discriminatorcolumn="class"
column="class"type="string"/>
type="string"/>
<property
“modelo"
int">
">
name=
modelo" type="int
type="
<propertyname=“
name=“modelo"
type="int">
<column
name=“
“
MODELO"
notnull="true"
name=
not
<column name=“MODELO" not-null="true"unique="false"
unique="false"
sql-type="INTEGER"/>
sql
sql-type="INTEGER"/>
</property>
</property>
……
<subclass
com.garage.Moto"" discriminatorname="
discriminator
<subclassname="com.garage.Moto
name="com.garage.Moto"
discriminatorvalue="Moto
Moto"
"
abstract="false">
value="
value="Moto" abstract="false">
<property
“permiteSidecar"
“boolean">
name=
permiteSidecar" type=“
type=
boolean">
<propertyname=“
name=“permiteSidecar"
type=“boolean">
<column
“PERMITE_SIDECAR" not-null="true"
name=
not
<columnname=“
name=“PERMITE_SIDECAR"
not-null="true"
unique="false"
-type="VARCHAR(255)"/>
sql
unique="false"sqlsql-type="VARCHAR(255)"/>
</property>
</property>
</subclass>
</subclass>
</class
class>
>
</
</class>
Sevilla, abril de 2007
Grupo de Ingeniería del Software
5
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Mapeo de Herencia (Una tabla por subclase)
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
<class
Vehiculo"" table="VEHICULO">
name="
<classname="Vehiculo
name="Vehiculo"
table="VEHICULO">
<id
java.lang.Long"" unsaved-value="null">
type="
unsaved
<idname="id"
name="id"type="java.lang.Long
type="java.lang.Long"
unsaved-value="null">
<column
name="ID"
sqltype="BIGINT"/>
sql
<column name="ID" sql-type="BIGINT"/>
<generator
<generatorclass="native">
class="native">
</generator>
</generator>
</id>
</id>
<property
“modelo"
int">
">…
…</property>
name=
modelo" type="int
type="
<propertyname=“
name=“modelo"
type="int">…</property>
...
...
<joined-subclass name="com.garage.Moto
com.garage.Moto"" table="MOTO"
<joined
name="
<joined-subclass
name="com.garage.Moto"
table="MOTO"
abstract="false">
abstract="false">
<key
-key="MOTOIFKC">
foreign
<keyforeignforeign-key="MOTOIFKC">
<column
-type="BIGINT"/>
sql
<columnname="ID"
name="ID"sqlsql-type="BIGINT"/>
</key>
</key>
<property
“permiteSidecar"
“boolean">
name=
permiteSidecar" type=“
type=
boolean">
<propertyname=“
name=“permiteSidecar"
type=“boolean">
<column
“PERMITE_SIDECAR" not-null="true"
name=
not
<columnname=“
name=“PERMITE_SIDECAR"
not-null="true"
unique="false"
-type="VARCHAR(255)"/>
sql
unique="false"sqlsql-type="VARCHAR(255)"/>
</property>
</property>
</joined-subclass>
</joined
</joined-subclass>
...
...
</class>
</class>
</hibernate-mapping>
</hibernate
</hibernate-mapping>
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Hibernate.cfg.xml
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
<?xml
>
<?xmlversion="1.0"
version="1.0"……>
<hibernate-configuration>
<hibernate
<hibernate-configuration>
<session-factory>
<session
<session-factory>
<!--- properties
>
<!
-<!-properties-->
-->
<property
connection.driver_class">
">
name="
<propertyname="connection.driver_class
name="connection.driver_class">
com.mysql.jdbc.Driver
com.mysql.jdbc.Driver
</property>
</property>
<property
connection.username">root</property>
">root</property>
name="
<propertyname="connection.username
name="connection.username">root</property>
<property
connection.password">admin</property>
">admin</property>
name="
<propertyname="connection.password
name="connection.password">admin</property>
<property
connection.url">
">
name="
<propertyname="connection.url
name="connection.url">
jdbc:mysql://localhost/basededatos
jdbc:mysql://localhost/basededatos
</property>
</property>
<property
show_sql">true</property>
">true</property>
name="
<propertyname="show_sql
name="show_sql">true</property>
<property
<propertyname="dialect">
name="dialect">
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.MySQLDialect
</property>
</property>
<!--- mapping
>
<!
-<!-mappingfiles
files-->
-->
<mapping
Persona.hbm.xml"/>
"/>
resource="com/garage/
<mappingresource="com/garage/Persona.hbm.xml
resource="com/garage/Persona.hbm.xml"/>
<mapping
Vehiculo.hbm.xml"/>
"/>
resource="com/garage/
<mappingresource="com/garage/Vehiculo.hbm.xml
resource="com/garage/Vehiculo.hbm.xml"/>
</session
session--factory>
</
factory>
</session-factory>
</hibernate
hibernate--configuration>
</
configuration>
</hibernate-configuration>
Sevilla, abril de 2007
Grupo de Ingeniería del Software
6
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Manejo de Sesiones y transacciones
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
SessionFactory
SessionFactorysessionFactory
sessionFactory==new
new
Configuration().configure().buildSessionFactory();
();
Configuration().configure().buildSessionFactory
Configuration().configure().buildSessionFactory();
Session
ses
=
sessionFactory.openSession();
();
sessionFactory.openSession
Session ses = sessionFactory.openSession();
Transaction
();
ses.beginTransaction
Transactiontx
tx==ses.beginTransaction();
ses.beginTransaction();
tx.commit();
();
tx.commit
tx.commit();
tx.rollback();
();
tx.rollback
tx.rollback();
ses.close();
();
ses.close
ses.close();
• HibernateException
• Funciones de hibernate (Create, Delete y Update)
Persona
Personapp==new
newPersona();
Persona();
session.Load(p,pkId);
); //
session.Load(p,pkId
session.Load(p,pkId);
//ooGet()
Get()
Session.save(p);
);
Session.save(p
Session.save(p);
Session.saveOrUpdate(p);
);
Session.saveOrUpdate(p
Session.saveOrUpdate(p);
session.Delete(p);
);
session.Delete(p
session.Delete(p);
p.setNombre(
(“Juan”
p.setNombre
Juan”);
p.setNombre(“Juan”);
session.update(p);
);
session.update(p
session.update(p);
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Funciones de Hibernate (Read)
Read)
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
List
)
session.createCriteria(Persona.class
Listpersonas
personas==session.createCriteria(Persona.class)
session.createCriteria(Persona.class)
.Add(Restrictions.like("nombre",
Ramon%")
") ))
Add(Restrictions.like("nombre", "Ramon%
""Ramon%")
.Add(Restrictions.like("nombre",
//
//elelnombre
nombredebe
debeser
serRamon
Ramonyylo
loque
quesiga
siga
.Add(Restrictions.between("edad",
("edad",
minAge,
, maxAge)
) ))
Add(Restrictions.between
minAge
maxAge
.Add(Restrictions.between("edad", minAge,
maxAge)
//la
á entre
est
//laedad
edadestá
está
entremin
minyymax
max
.Add(Restrictions.or(
//o
Add(Restrictions.or(
.Add(Restrictions.or(
//ola
laedad
edades
escero
cerooonull
null
Restrictions.eq(
( "edad",
(0) ),),
Restrictions.eq
Integer
Restrictions.eq(
"edad",new
newInteger(0)
Integer(0)
Restrictions.isNull("edad")
("edad")
Restrictions.isNull
Restrictions.isNull("edad")
))
))
.Add(Restrictions.in(
[] {{"Ramon",
Add(Restrictions.in( "nombre",
String
.Add(Restrictions.in(
"nombre",new
newString[]
String[]
"Ramon",
"Paco",
"Paco","Fran"
"Fran"}}))))
//
ón, Paco
Ram
//elelnombre
nombresolo
solopuede
puedeser
serRamó
Ramón,
PacoooFran
Fran
.Add(Restrictions.disjunction()
Add(Restrictions.disjunction()
.Add(Restrictions.disjunction()
.Add(Restrictions.isNull("edad")
Add(Restrictions.isNull("edad") ))
.Add(Restrictions.isNull("edad")
.Add(Restrictions.eq("edad",
(0) ))))
Add(Restrictions.eq("edad", new
Integer
.Add(Restrictions.eq("edad",
newInteger(0)
Integer(0)
.Add(Restrictions.eq("edad",
("edad",
new
Integer(1)
(1)
Add(Restrictions.eq
Integer
.Add(Restrictions.eq("edad", new Integer(1)))))
.Add(Restrictions.eq("edad",
(2) ))))
Add(Restrictions.eq("edad", new
Integer
.Add(Restrictions.eq("edad",
newInteger(2)
Integer(2)
//
la
edad
solo
puede
ser
null,
,
0,
1
o
2
null
// la edad solo puede ser null, 0, 1 o 2
))
))
.list();
list();
.list();
Sevilla, abril de 2007
Grupo de Ingeniería del Software
7
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Patron DAO (java 5)
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
– Recomendado por hibernate
public
<T, ID
>
GenericDAO
Serializable
publicinterface
interfaceGenericDAO<T,
GenericDAO<T,
IDextends
extendsSerializable>
Serializable>
{{
TTfindById(ID
findById(IDid,
id,boolean
booleanlock);
lock);
List<T>
findAll();
();
findAll
List<T> findAll();
List<T>
, String…
…
exampleInstance
String
List<T>findByExample(T
findByExample(TexampleInstance,
exampleInstance,
String…
excludeProps);
);
excludeProps
excludeProps);
TTmakePersistent(T
makePersistent(Tentity);
entity);
void
voidmakeTransient(T
makeTransient(Tentity);
entity);
}}
– Extender para cada pojo
public
<Persona,
GenericDAO
publicinterface
interfacePersonaDAO
PersonaDAOextends
extendsGenericDAO<Persona,
GenericDAO<Persona,
Long>
Long>
{}
{}
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Forma de trabajo
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
Persona
Personapp==new
newPersona();
Persona();
//
Atributo
Normal
// Atributo Normal
p.setNombre("nombre");
");
p.setNombre("nombre
p.setNombre("nombre");
//
//Componentes
Componentes
Direccion
"," calCas","
"," codCas");
");
Direccion("ciuCas
calCas
codCas
Direcciondd==new
newDireccion("ciuCas","
Direccion("ciuCas","
calCas","
codCas");
//constructor
//constructorcon
conparametros
parametros
p.setDireccionCasa(d);
);
p.setDireccionCasa(d
p.setDireccionCasa(d);
dd==new
Direccion("calDirTra","
"," ciuDirTra","
"," codDirTra");
");
Direccion("calDirTra
ciuDirTra
codDirTra
new Direccion("calDirTra","
ciuDirTra","
codDirTra");
p.setDireccionTrabajo(d);
);
p.setDireccionTrabajo(d
p.setDireccionTrabajo(d);
//
//Enumeration
Enumeration--constructor
constructordesde
desdestring
string
Sexo
“HOMBRE");
Sexo.fromString(
HOMBRE");
Sexosx
sx==Sexo.fromString(“
Sexo.fromString(“HOMBRE");
p.setSexo(sx);
);
p.setSexo(sx
p.setSexo(sx);
//Guardo
Guardo
//
//Guardo
DAOFactory
;
dfact
DAOFactorydfact;
dfact;
DAOFactory.getInstance();
(); 
dfact
=
DAOFactory.getInstance
dfact = DAOFactory.getInstance();
Implementar
Implementar
PersonaDAO
pdao
=
dfact.getPersonaDAO();
();
dfact.getPersonaDAO
PersonaDAO pdao = dfact.getPersonaDAO();
HibernateUtils.beginTransaction();
(); 
HibernateUtils.beginTransaction
HibernateUtils.beginTransaction();
Implementar
Implementar
pdao.makePersistent(p);
);
pdao.makePersistent(p
pdao.makePersistent(p);
HibernateUtils.commitTransaction();
(); 
HibernateUtils.commitTransaction
HibernateUtils.commitTransaction();
Implementar
Implementar
Sevilla, abril de 2007
Grupo de Ingeniería del Software
8
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• La alternativa – JPA
– EJB3
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
Especificación de SUN
– Intervinieron gente de Hibernate y Oracle
1. Introducció
Introducción
– Trabaja con POJOs
2. POJOs
3.Mapeo de clases
– Xml mapping
4. Primitivas de
Hibernate
– HQL
5. Patró
Patrón DAO
6. Alternativa
Anotaciones
EJB QL
– Session y transaction
7. Bibliografí
Bibliografía
Por contenedor (no Home)
– Anoaciones opcionales
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Sevilla, abril de 2007
Grupo de Ingeniería del Software
Hibernate
• Ejemplo
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
@Entity
@Entity
public
publicclass
classPersona
Persona{{
private
;
id
privateLong
Longid;
id;
private
privateString
Stringnombre;
nombre;
private
> vehiculos
>();
Collection<Vehiculo
HashSet<Vehiculo
privateCollection<Vehiculo>
Collection<Vehiculo>
vehiculos==new
newHashSet<Vehiculo>();
HashSet<Vehiculo>();
@Id(generate=AUTO)
=AUTO)
@Id(generate
@Id(generate=AUTO)
public
(){ return
; }}
getId
this.id
publicLong
LonggetId(){
getId(){
returnthis.id;
this.id;
public
){ this.id
; }}
id
id
publicvoid
voidsetId(Long
setId(Longid){
id){
this.id==id;
id;
@Column(length=500)
=500)
@Column(length
@Column(length=500)
public
(){ return
; }}
getNombre
this.nombre
publicString
StringgetNombre(){
getNombre(){
returnthis.nombre;
this.nombre;
public
){ this.nombre
; }}
nom
nom
publicvoid
voidsetNombre(String
setNombre(Stringnom){
nom){
this.nombre==nom;
nom;
@OneToMany(cascade=ALL)
=ALL)
@OneToMany(cascade
@OneToMany(cascade=ALL)
public
> getVehiculos()
() {return
return this.vehiculos;}
;}
Collection<Vehiculo
getVehiculos
{{return
this.vehiculos
publicCollection<Vehiculo>
Collection<Vehiculo>
getVehiculos()
this.vehiculos;}
public
> vehiculos){
){
setVehiculos(Collection<Vehiculo
vehiculos
publicvoid
voidsetVehiculos(Collection<Vehiculo>
setVehiculos(Collection<Vehiculo>
vehiculos){
this.vehiculos
;
vehiculos
this.vehiculos==vehiculos;
vehiculos;
}}
public
publicvoid
voidaddVehiculo(Vehiculo
addVehiculo(Vehiculovehiculo)
vehiculo){{
this.vehiculos.add(vehiculo);
);
this.vehiculos.add(vehiculo
this.vehiculos.add(vehiculo);
/*vehiculo.setPersona(this
vehiculo.setPersona(this);*/
);*/
/*
/*vehiculo.setPersona(this);*/
}}
}}
Sevilla, abril de 2007
Grupo de Ingeniería del Software
9
[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)
Hibernate
• Bibliografí
Bibliografía
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
– Hibernate in Action
Manning
1. Introducció
Introducción
2. POJOs
3.Mapeo de clases
4. Primitivas de
Hibernate
5. Patró
Patrón DAO
6. Alternativa
7. Bibliografí
Bibliografía
– POJOs in Action
Manning
– EJB3 in Action
Manning
Sevilla, abril de 2007
Grupo de Ingeniería del Software
10
Descargar