Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 27

ACCESO A DATOS

CAPÍTULO 4
Herramientas de mapeo objeto‐relacional

José Eduardo Córcoles


Francisco Montero
ÍNDICE DE CONTENIDOS
1. Concepto de mapeo objeto‐relacional (ORM).
2
2. Características de las herramientas ORM.
ORM
3. Instalación y configuración de una herramienta ORM.
4
4. Estructura de ficheros de Hibernate.
Hibernate Mapeo y clases
persistentes.
5.
5 Sesiones Objeto para crearlas
Sesiones. crearlas.
6. Carga, almacenamiento y modificación de objetos.
7
7. Consultas HQL (Hibernate Query Language).
Language)
8. Conclusiones y propuestas para ampliar.
9
9. Resumen del capítulo.
capítulo
OBJETIVOS
a) Instalar la herramienta ORM.
b) Configurar la herramienta ORM.
ORM
c) Definir los ficheros de mapeo.
d) Aplicar mecanismos de persistencia a los objetos
objetos.
e) Desarrollar aplicaciones que modifican y recuperan objetos
persistentes.
persistentes
f) Desarrollar aplicaciones que realizan consultas usando el
lenguaje SQL.
g) Gestionar las transacciones.
4.1 CONCEPTO DE MAPEO OBJETO‐
OBJETO‐
RELACIONAL (ORM)
(ORM)
• El mapeo objeto‐relacional (más conocido con sus siglas ORM)
es una técnica de programación que permite convertir datos
entre el sistema de tipos utilizado en un lenguaje de
programación y el utilizado en una base de datos relacional.
• Las ventajas principales del mapeo objeto‐relacional son:
– Rapidez en el desarrollo.
– Abstracción de la base de datos.
– Reutilización.
– Mantenimiento del código.
código
– Lenguaje propio para realizar las consultas.
– El tiempo
p utilizado en el aprendizaje.
p j
– Aplicaciones algo más lentas.
4.2 CARACTERÍSTICAS DE LAS HERRAMIENTAS
ORM
• El modelo relacional trata con relaciones y conjuntos de
datos.
datos
• El paradigma OO trata con clases de objetos, objetos,
atributos,, métodos y asociaciones entre objetos.
j
• Un mapeo objeto‐relacional (ORM) tiene como misión evitar
estas diferencias y facilitar la tarea del programador.
• Teóricamente a partir de los objetos Java se puede hacer la
persistencia en un sistema relacional ejecutando: orm.save
(elemento_a_persistir) y orm.load (objeto_persistido).
4.3 INSTALACIÓN Y CONFIGURACIÓN DE UNA
HERRAMIENTA ORM
• En esta sección, para tener
una herramienta de
referencia para abordar el
resto del capítulo, se utilizar
Hibernate
b como ORM que
permite el mapeo objeto‐
relacional para Java.
Java
• Hibernate está diseñado
para ser flexible en cuanto
al esquema de tablas
utilizado y al adaptarse a su
uso sobre una base de
datos ya existente.
4.3.1 INSTALACIÓN MANUAL
• Para instalar Hibernate (versión 4) y poder ser utilizado, por
ejemplo en el IDE Neatbeans 7.1.2
ejemplo, 7 1 2 se pueden seguir los
siguientes pasos:
– Paso 1: Acceder al sitio de Hibernate.
– Paso 2: Descargar la última versión.
– Paso 3: Una vez descargado el fichero hibernate‐release‐4.1.9.Final.zip
se descomprime
descomprime.
– Paso 4: En este paso se copian todos los ficheros jar que se encuentran
en la carpeta lib\required en la carpeta lib de nuestro proyecto Java.
– Paso 5: Copiar el fichero hibernate‐entitymanager‐4.1.0.Final.jar de la
carpeta lib\jpa también en la carpeta lib de nuestro proyecto Java.
– Paso 6: Es necesario indicar a NetBeans 7.1.2
7 1 2 que se desean usar todas
esas librerías, para ello botón derecho pulsar sobre el árbol en el nodo
“Libraries” y seleccionar la opción de menú “Add Jar/Folder...”
4.3.2 USAR NETBEANS CON J2EE
• Una solución más sencilla que la anterior es descargarse una
versión de IDE NetBeans que contenga ya el paquete
Hibernate.
4.4 ESTRUCTURA DE FICHEROS DE
HIBERNATE MAPEO Y CLASES PERSISTENTES
HIBERNATE.
• Hibernate tiene dos clases importantes:
– Las clases Java que representan los objetos que tienen
correspondencia con las tablas de la base de datos relacional.
– El fichero de mapeo (.hbm.xml) que indica el mapeo entre los
atributos
b d
de una clase
l y llos campos d
de lla tabla
bl relacional
l l con lla que
está asociado.
4.4.1 CLASES JAVA PARA REPRESENTAR LOS
OBJETOS (POJO)
(POJO)
public class Albumes implements java.io.Serializable {
• Las clases Java representan private int id;
objetos
j en una aplicación
p private Stringg titulo;;
p
que use Hibernate. private String autor;

• A estas clases Hibernate se public Albumes() { }

refiere a ellas como POJO public int getId() { return this.id; }


(Plain Old Java Objects).
public void setId(int id) { this.id
this id = id; }
public String getTitulo() { return this.titulo; }
public void setTitulo(String titulo) {
this.titulo = titulo;;
}
public String getAutor() { return this.autor; }
public void setAutor(String autor) {
this.autor = autor;
}
}
4.4.2 FICHERO DE MAPEO ''.HBM.XML
''.HBM.XML''''
<?xml version="1.0"?>
• Cada clase que se quiere <!DOCTYPE hibernate‐mapping PUBLIC "‐
hacer ppersistente se creará //Hibernate/Hibernate Mapping DTD 3.0//EN"
"htt //hib
"http://hibernate.sourceforge.net/hibernate‐mapping‐
t f t/hib t i
un fichero XML con la 3.0.dtd">
<!‐‐ Generated 11‐ene‐2013 17:04:45 by Hibernate Tools
información que permitirá 3.2.1.GA ‐‐>
<hibernate‐mapping>
<hibernate mapping>
mapear esa clase
l a una <class name="accesohibernate.Albumes" table="ALBUMES"
schema="ROOT">
base de datos relacional. <id name="id" type="int">
<column name
name="ID"
ID />
• Este
E t fichero
fi h XML estará
t á en <generator class="assigned" />
el mismo paquete que la </id>
<property name="titulo" type="string">
clase cuyos objetos se <column name=
name="TITULO"
TITULO length=
length="30"
30 />
</property>
quieren hacer persistentes. <property name="autor" type="string">
<column name="AUTOR" length="20" />
</property>
</class>
</hibernate‐mapping>
4.4.3 CREAR FICHEROS DE MAPEO CON
NETBEANS
• Antes de explicar los pasos
a seguir
g es necesario crear
el proyecto Java y una
conexión a una bases de
datos.
– Crear con NetBeans un
proyecto tipo Aplicación Java
(Java Application).
– Crear una base de datos en el
propio
i entorno
t de
d IDE
NetBeans (JavaDB).
4.4.3 CREAR FICHEROS DE MAPEO CON
NETBEANS
Fichero de configuración. – (1) menú Fichero (File)‐Nuevo
archivo y seleccionar (otros…)
• Al proyecto Java se le añade un tipo
i archivo
hi ded
un nuevo archivo configuración de Hibernate.
(hibernate.cfg). Este archivo – ((2)) Pulsar Siguiente.
g
contendrá la información – (3) El nombre por defecto es
necesaria para conectar a la hibernate.cfg. Sin cambiar
b
base d
de ddatos
t sobre
b lal que nada se pulsa de nuevo en
se hará la persistencia. Siguiente.
– (4) De la lista desplegable se
• Para crearlo se pueden selecciona la conexión a la
seguir los siguientes pasos: base de datos, que ha debido
ser creada con anterioridad
– (5) Una vez seleccionada
pulsar en Terminar.
4.4.3 CREAR FICHEROS DE MAPEO CON
NETBEANS
Fichero de ingeniería inversa – (2) pulsar Siguiente.
• Este archivo indica el – (3) el nombre por defecto del
fichero será
esquema en el que se hibernate.revenge. pulsar
encontrará la tabla a Siguiente.
g
mapear. – (4) Se selecciona la tabla que
• Para crearlo se siguen los se quiere mapear.
siguientes pasos: – (5) U
Una vez seleccionada
l i d se
pulsa en Terminar.
– (1) seleccionando el paquete
default package se pulsa con
el botón derecho y se
selecciona Nuevo e Hibernate
Reverse Engineering Wizard.
Wizard
Actividad 4.1
4.4.3 CREAR FICHEROS DE MAPEO CON
NETBEANS
Ficheros POJO y de mapeo – (2) se pulsa Siguiente.
• En este paso se creará el – (3) ya solo es necesario
indicar el nombre de un
fichero POJO que es la clase paquete en el que almacenar
Java obtenida a partir de la los nuevos ficheros qque se
tabla de la base de datos y van a crear. En el ejemplo es
el fichero de mapeo accesohibernate.
( hb
(.hbm.xml).
l) – (4) Una vez seleccionado se le
da a Terminar.
• Para crearlo se siguen los
siguientes pasos:
– (1) seleccionando el paquete
default package , pulsar
botón derecho y Nuevo, otros
y Hibernate mapping files. Actividad 4.1
4.4.3 CREAR FICHEROS DE MAPEO CON
NETBEANS
Ficheros HibernateUtil.java – (2) Se pulsa en Siguiente.
• Este fichero se utiliza para – (3) Se cambia al nombre por
defecto (NewHibernateUtil)
gestionar las conexiones por HibernateUtil y también
que se hacen a las base de se selecciona un p
paquete
q
datos y que permitirán accesohibernate (creado
mapear los objetos en las antes) que será donde se
t bl correspondientes.
tablas di t almacene el fichero.
fichero
– (4) Una vez hecho se le da a
• Para crearlo se siguen los terminar.
siguientes pasos:
– (1) seleccionado el paquete
accesohibernate, se pulsa el
botón derecho , Nuevo ,
otros… e HibernateUtil.java. Actividad 4.1
4.5 SESIONES. OBJETO PARA CREARLAS
• La clase más utilizada con Hibernate es Session, localizada en
el paquete org.hibernate.Session
org hibernate Session
• Esta clase contiene métodos para leer, guardar o borrar
entidades sobre la base de datos.
• La clase Session tiene cómo métodos más destacables:
– beginTransaction(): método para hacer transacciones.
– save(): método para hacer un objeto persistente en la base de datos.
– delete(): método para eliminar los datos de un objeto.
– update(): método para modificar un objeto.
– get(): método para recuperar un objeto.
– createQuery(): método para crear una consulta HQL(Hibernate Query
Language) y ejecutarla sobre la base de datos.
4.6 CARGA, ALMACENAMIENTO Y
MODIFICACIÓN DE OBJETOS
• Seguidamente se muestra cómo usar Hibernate para las
operaciones básicas sobre una base de datos: guardar un
objeto, recuperarlo, modificarlo y eliminarlo.
4.6.1 GUARDAR
public static void annadir_album(int id, String tit, String aut)
• Para guardar un objeto {
((hacerlo p
persistente)) se usa Transaction tx=null;
Session session =
el método save(Objecto). HibernateUtil.getSessionFactory().openSession();
tx=session.beginTransaction(); //Crea una transacción
• Los pasos son: Albumes a = new Albumes(id);
a.setAutor(aut);
( )
– (1) crear un objeto y a.setTitulo(tit);
posteriormente hacerlo a.setId(id);
session.save(a);//Guarda el objeto creado en la BBDD.
persistente con el método tx.commit(); //MAterializa la transacción
save. session.close();

– Para que la persistencia tenga }


é i es necesario
éxito i abrir
bi
previamente una transacción
y confirmarla al final para
materializar los datos en la
bases de datos. Actividad 4.2
4.6.2 LEER
• Para recuperar un objeto de public static void recuperar_album(int id)
{
la base de datos se usa el Transaction tx=null;
tx null;
método get(Class, clave Session session =
primaria del objeto). HibernateUtil.getSessionFactory().openSe
ssion();
• El código muestra un Albumes a ;
ejemplo de utilización con
a=(Albumes)session.get(Albumes.class,id);
( ) g ( , );
un método.
ét d System.out.println ("Autor: " +
recuperar_Album() al que se a.getAutor());
pasa como parámetros la session.close();

clave primaria (id) del }


objeto a recuperar.

Actividad 4.3
4.6.3 ACTUALIZAR
public static void modificar_album(int id, String tit, String aut)
• Para modificar un objeto {
existente en la base de Transaction tx=null;
Session session =
datos se usa el método HibernateUtil.getSessionFactory().openSession();
tx=session.beginTransaction(); //Crea una transacción
update(Objeto). Albumes a = new Albumes(id);
a.setAutor(aut);
( )
• El código muestra un a.setTitulo(tit);

ejemplo de utilización con a.setId(id);


session.update(a);//Modifica el objeto con Id indicado
un método.
ét d tx.commit(); //MAterializa la transacción
session.close();
modificar_Album() al que se
le pasa como parámetros la }

clave primaria (id) y los


nuevos valores para título y
autor.
Actividad 4.4
4.6.4 BORRAR
public static void borrar_album(int id)
• Para borrar un objeto desde {
la base de datos el método Transaction tx=null;;
que se utiliza es delete Session session =
HibernateUtil.getSessionFactory().openSession();
(Object object), al que se le tx=session.beginTransaction(); //Crea una
transacción
pasa ell objeto
b a borrar.
b Albumes a = new Albumes(id);
• El código muestra el session.delete(a);
y p
System.out.println (("Objeto
j borrado");
);
método
ét d borrar_Album()
b Alb () que tx.commit(); //MAterializa la transacción
borra un objeto con id que session.close();

se le pasa como parámetro. }

Actividad 4.5
4.7 CONSULTAS HQL (HIBERNATE QUERY
LANGUAGE))
LANGUAGE
• En Hibernate el lenguaje utilizado se llama HQL (Hibernate
Query Language).
Language)
• Este lenguaje es una versión de la sintaxis de SQL, adaptada
para devolver objetos.
p j
• HQL tiene las siguientes características:
– Los tipos de datos son los de Java.
– Las consultas son independientes del lenguaje de SQL específico de la
base de datos.
– Las
L consultas
lt son iindependientes
d di t deld l modelo
d l dde tablas
t bl de d la
l base
b de
d
datos. No se necesita conocer el modelo lo que hace de la
independencia una ventaja.
– Es posible tratar con las colecciones de Java (java.io.List, por ejemplo).
– Es posible navegar entre los distintos objetos en la propia consulta.
4.7.1 EJECUTAR HQL DESDE JAVA
public static void consulta()
• Desde un proyecto Java con {
Hibernate se p puede String c= “select a from Albumes a where titulo like
'%l %”
'%love%”;
ejecutar consultas HQL Session session =
HibernateUtil.getSessionFactory().openSession();
utilizando la clase Query. Query q= session.createQuery(c);
List results = q.list();
q list();
• Uno de los métodos más q.
Iterator albumesiterator= results.iterator();
usados de la clase Query es while (albumesiterator.hasNext())
li t() Este
list(). E t método
ét d devuelve
d l {
Albumes a2= (Albumes)albumesiterator.next();
un java.io.List (Colección) System.out.println ( " ‐ " + a2.getTitulo () );
}
con los objetos devueltos session.close();
l ()
por una consulta HQL. }

Actividad 4.6
4.8 CONCLUSIONES Y PROPUESTAS PARA
AMPLIAR
• Este capítulo se ha centrado únicamente en las alternativas
más básicas que muestren una idea global de lo que
Hibernate puede ofrece. Con esta base, profundizar en
Hibernate es más sencillo.
• A continuación se muestran líneas posibles de ampliación de
los contenidos :
– Estudiar HQL y las posibilidades que ofrece para consultas avanzadas
que reúnan varios objetos.
– Ampliar el conocimiento sobre los métodos y clases de Hibernate.
Hibernate
4.9 RESUMEN DEL CAPÍTULO
• En el capítulo se han mostrado las características de los ORM.
• Esta alternativa de acceso a datos permite el acceso
transparente a los sistemas relacionales a través de objetos.
• En este capítulo se ha trabajado con Hibernate para Java.
Java
• Este capítulo sirve como muestra para una alternativa de
acceso a datos a medio camino entre el acceso directo y
clásico con JDBC (conectores), como muestra el capítulo 2, y el
acceso más avanzado a bases de datos OO, como muestra el
capítulo 3.
ACCESO A DATOS

CAPÍTULO 4
Herramientas de mapeo objeto‐relacional

José Eduardo Córcoles


Francisco Montero

También podría gustarte