Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
Introducción Base de Datos
n Base de Datos
¨ Conjunto de datos relacionados con diferentes modos
de organización.
n DBMS (Database Management System)
¨ Grupo de Programas que sirven para definir, construir
y manipular una base de datos.
n Metadata
¨ Información sobre un conjunto particular de datos.
3
Destino de Persistencia
n Persistencia de Objetos
¨ Extender el tiempo de vida de un objeto más allá del
tiempo de vida del proceso que lo creó.
n Destino de Persistencia
¨ Fuente de datos (Data Source) donde se persiste la
información de una aplicación.
5
Acceso directo a Base de Datos
6
Acceso
directo a Base de Datos
nVentaja
¨Buen desempeño debido a que el acceso a la
base se realiza en forma directa
¨Simplifica acceso a la Base de Datos
n
Desventaja
¨Mayor complejidad para el diseño de la
persistencia
n Herramienta
Java
¨Java Database Connectivity (JDBC)
7
JDBC
nFuncionamiento
¨Sentencias
SQL para realizar consultas y modificar el
estado de la BD:
nINSERT
nUPDATE
nDELETE
nSELECT
nPortabilidad
¨Interfaz
de programación portable pero el lenguaje
SQL depende del proveedor de BD
8
JDBC - Arquitectura
9
JDBC - Diseño
n Patrón de Diseño Data Access Object (DAO)
¨ Encapsula todo el acceso al destino de datos
utilizando la capa de acceso a datos.
¨ Cada objeto de negocio a ser persistido crea un
DAO con la información necesaria.
¨ Luego utiliza el objeto DAO para obtener y guardar
información del origen de datos.
n Problema al “mapear” del modelo OO al
relacional:
¨ Impedance Mismatch
10
Impedance Mismatch (IM)
nDiferencias entre modelos
11
IM: Ejemplos de mapeo
n Entidad
¨ modelo OO
12
IM: Ejemplos de mapeo
n Entidad
¨ modelo relacional
13
IM: Ejemplos de mapeo
n Relaciones
¨ modelo OO
14
IM: Ejemplos de mapeo
n Relaciones
¨ modelo relacional
15
IM: Ejemplos de mapeo
n Herencia
¨ modelo OO
16
IM: Ejemplos de mapeo
n Herencia
¨ modelo relacional
17
Mapeador Objeto-Relacional
18
Mapeador Objeto-Relacional
Técnica que permite llenar el vacío entre el
n
modelo relacional y el modelo orientado a objetos.
¨ También conocido como O-R mapping u ORM
n Existe un mediador, encargado de mapear
automáticamente los conceptos de un modelo en
el otro.
19
Mapeador Objeto-Relacional
n Ventaja
¨ Reduce la cantidad de código necesario para lograr la
persistencia. La aplicación resultante es fácil de
mantener.
n
Desventaja
¨ Requiere mantener metadata sobre las entidades.
n Herramientas Java:
¨ JPA
¨ Hibernate
¨ TopLink
20
Java Persistence API
n
Es un framework liviano para mapear objetos a
BD relacionales usando la Plataforma Java en
sus ediciones Standard (Java SE) y Enterprise
(Java
EE)
n Surge originalmente de la mano de EJB 3.0,
adoptando la experiencia de años de uso de
Hibernate y Toplink, seguidos luego por JDO
21
Java Persistence API
n
Persistencia basada en POJOs (Plain Old Java
Objects)
n Guiada
por metadatos
¨ XML
¨ Anotaciones
¨ Gran uso de valores por defecto (configuración por
excepción)
¨ Los metadatos se pueden agrupar en anotaciones
lógicas y físicas
22
Java Persistence API
n Consultas orientadas a objetos
¨Provee un mecanismo para realizar
consultas, recorriendo los objetos, sus
propiedades y sus relaciones, sin necesidad
de conocer columnas o claves foráneas a
nivel de la base de datos
¨Las consultas eventualmente serán
traducidas a SQL por el framework de
consultas de JPA
23
JPA
- Entidades
nEntidades
n Se anotan con @Entity
n
Tienen una propiedad anotada con @Id
n Constructor sin argumentos public/protected
n No puede ser final
n Puede extender de otra
n Puede ser abstracta
n Son POJOs (Plain Old Java Object)
24
JPA - Entidades
n Ejemplo
25
JPA - Entidades
nMapeo de entidades
¨Por defecto se persisten en una tabla con el
nombre de la clase
¨Si queremos persistir en otra tabla a nivel de
la BD, podemos usar la anotación @Table
26
JPA - Entidades
n Generación de identificadores:
¨ A veces las aplicaciones deciden desentenderse de
la generación automática de los identificadores
¨ Para ello se usa la anotación @GeneratedValue, en
combinación con la anotación @Id
¨ No podemos confiar en que el valor este presente
hasta que la transacción sea completada
27
JPA - Entidades
n Mapeo de atributos con tipo simple
¨ Incluye int, float, boolean, String, Date, Calendar, enumerados, etc.
¨ Por defecto se persisten todos los atributos, en columnas con el
mismo nombre.
¨ Si queremos persistirlos en otra columna a nivel de la DB,
podemos usar la anotación @Column.
28
JPA - Relaciones
n Direccionalidad
¨ Relaciones Unidireccionales
¨ Relaciones Bidireccionales
n Cardinalidad
One-to-one
¨
¨ One-to-many
¨ Many-to-one
¨ Many-to-many
29
JPA - Relaciones
n Unidireccional: OneToOne
30
JPA - Relaciones
n Unidireccional: OneToOne
¨ @JoinColumn permite indicar la columna a la que se
va a mapear la relación.
31
JPA - Relaciones
n Unidireccional: OneToMany
32
JPA - Relaciones
n Unidireccional: OneToMany
¨ Es posible especificar la JoinTable que debe ser
usada a nivel de BD
33
JPA - Relaciones
n Unidireccional: ManyToOne
34
JPA - Relaciones
n Unidireccional: ManyToOne
¨ @JoinColumn indica la columna que permite realizar
el join a nivel de la BD.
35
JPA - Relaciones
n Bidireccional: OneToOne
36
JPA - Relaciones
n Bidireccional: OneToOne
¨ La anotación mappedBy sirve para indicar que una
referencia corresponde a una relación bidireccional y
no dos unidireccionales independientes
¨ La anotación @JoinColumn, va a estar en la entidad
que contiene la columna a la que se va a mapear la
relación. Esta entidad se conoce como owner (dueña)
de la relación
¨ La otra entidad se conoce como el lado inverso de la
relación y debe tener la anotación @mappedBy
37
JPA - Relaciones
n Bidireccional: OneToMany / ManyToOne
38
JPA - Relaciones
n Bidireccional: OneToMany / ManyToOne
39
JPA - Relaciones
n Bidireccional: ManyToMany
40
JPA - Relaciones
n Bidireccional: ManyToMany
¨ Join Table
41
JPA - Relaciones
n Bidireccional: ManyToMany
¨ Es posible configurar la tabla usada para mantener
las relaciones a través de la anotación @JoinTable
42
JPA - EntityManager
n Las entidades no se persisten a si mismas cuando son
creadas, así como tampoco son removidas cuando el
garbage collector recicla los objetos
n Es la lógica de la aplicación la que debe manejar el ciclo
de vida de persistencia
n Para este propósito, JPA provee la interfaz
EntityManager:
43
JPA - EntityManager
n La interfaz EntityManager define una serie de métodos
que permiten manejar el ciclo de vida de las entidades
de una aplicación
n Estos métodos incluyen operaciones como
¨ Persistencia de entidades
¨ Recuperación de entidades
¨ Obtención de consultas
¨ Inicio y fin de transacciones
44
JPA - EntityManager
n Ciclo de vida de las entidades
45
JPA - EntityManager
n persist()
¨ Esta operación acepta una nueva entidad como
parámetro y la deja en estado managed.
¨ Si la entidad a persistir ya esta siendo administrada
por el contexto de persistencia, entonces la operación
la ignora.
¨ Podemos usar la operación contains() para verificar si
la entidad esta managed.
¨ La invocación de esta operación no significa que la
entidad es persistida en ese momento.
46
JPA - EntityManager
n
persist()
n Ejemplo:
47
JPA - EntityManager
n find()
¨ Cuando una entidad debe ser localizada usando su
primary key, entonces el método a utilizar es find().
¨ Si la entidad existe devuelve una entidad que queda
en estado managed.
n Ejemplo:
48
JPA - EntityManager
n remove()
¨ Para remover una entidad, se invoca remove() a una
instancia de la entidad que se encuentre en estado
managed.
¨ Hay que prestar atención a las relaciones con otras
entidades, para evitar problemas de integridad
referencial.
n Ejemplo:
49
JPA - EntityManager
n Transacciones
¨ Se deben utilizar transacciones manejadas
explícitamente por la aplicación.
¨ Se utiliza la interfaz EntityTransaction:
50
JPA - EntityManager
n Transacciones
¨ Ejemplo:
51
JPA - EntityManager
n Consultas
¨ En JPA se utilizan consultas orientadas a objetos,
aplicadas sobre las entidades, sus propiedades y sus
relaciones
¨ El lenguaje utilizado se denomina Java Persistence
Query Language (JPQL)
¨ El procesador de consultas de JPA, transforma una
consulta JPQL en una consulta SQL
¨ Las consultas pueden ser de tipo Query,
obteniéndose a través de la interfaz EntityManager
52
JPA - EntityManager
n Consultas
¨Una consulta JPQL admite los siguientes
elementos:
n SELECT
n
FROM
n WHERE
n ORDER BY
n GROUP BY
n HAVING
53
JPA - EntityManager
n Consultas
¨ Ejemplo:
54
JPA - EntityManager
n Consultas
¨ Ejemplo con parámetro:
55
JPA - EntityManager
n Consultas
¨ Ejemplo con parámetro usando notación named
56
JPA – Unidad de Persistencia
n
Se define en un archivo XML denominado
persistence.xml.
n
Cada Persistence Unit tiene un nombre único, el
cual es usado por la aplicación para referirse a
la
misma.
n Dentro del archivo persistence.xml pueden
definirse todas las unidades que se requieran,
siendo cada una de estas independiente.
57
JPA – Unidad de Persistencia
n Ejemplo: persistence.xml
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.
58
Ejemplo
n Implementación JPA
¨Open JPA
n Base
de Datos
¨HSQLDB
59
Referencias
n Pro EJB 3 Java Persistence API
¨ Mike Keith. Apress 2006
n HSQLDB
¨ http://hsqldb.org/
n
JPA
Tutorial
¨ http://docs.oracle.com/javaee/5/tutorial/doc/bnbpz.html
n Eclipse JPA
¨ http://www.eclipse.org/eclipselink
60