Persistencia Jpa

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

JAVA PERSISTENCE API JPA

U3S6F2 – CARTILLA DE CONTENIDOS

INDICE
Introducción a java Persistence API
Métodos para lograr la persistencia
Data acess object dao Patron
Creando una aplicación partiendo desde un esquema de base de datos
Persistencia en nivel web

INTRODUCCION
Introducción a java Persistence API, más conocida por sus siglas JPA es el API de
persistencia desarrollada por la plataforma JavaEE.

Proporciona un estándar para gestionar datos relacionales en aplicaciones JSE o


JEE, de forma que además simplifica el desarrollo de la persistencia de datos, JPA
se encarga de mapear una clase a una tabla de una base de datos, de esta manera
solo tenemos que escribir el código de nuestra clase con sus atributos y sus
métodos. JPA se encarga de realizar la persistencia de los objetos de dicha clase
en la base de datos.

DESARROLLO TEMÁTICO.

Java Persistence API, JPA permite la persistencia no solo en la base de datos, sino
que también en otros formatos como archivos de texto plano y XML. Las
aplicaciones empresariales necesitan recolectar, procesar, transformar y reportar
grandes cantidades de información, toda esta información debe estar almacenada
en algún lugar. Java ofrece una solución estándar denominada Java Persistence
API o JPA que facilita el trabajo al desarrollador de software ya que sirve de puente
entre el mundo de desarrollo y el mundo de las bases de datos, permitiendo una
mayor gestión de la información que es crucial al mundo de hoy para muchos
negocios.

Mencionemos las diferencias entre el modelo orientado a objetos y el modelo


relacional, los datos manejados por algún sistema en algún momento terminaran
siendo almacenados en Bases de Datos para su posterior recuperación y análisis.
Las bases de datos relacionales almacenan los datos en tablas formadas por filas y
columnas.
Figura No. 1 Modelo Relacional, Imagen tomada del sitio
http://www.esandra.com/mysql-i-introduccion-a-las-bases-de-datos-relacionales/

Cada registro usa como identificar un único campo de llaves primarias, las
relaciones entre tablas se representan mediante claves foráneas o tablas joins,
respetando restricciones de integridad, toda esta terminología es propia del modelo
relacional. Sin embargo es totalmente desconocido en el modelo orientado a objetos
a objetos propio de java.

En la orientación a objetos se manejan clases y sus instancias denominadas


objetos; los objetos encapsulan su estado y comportamiento mientras está
corriendo la máquina virtual de java, si se detiene la máquina se caen o se pierden
todos los datos del negocio que maneja el sistema en ese momento, para evitar esto
necesitamos mecanismos de persistencia.

La persistencia es el proceso de almacenar el estado de un objeto de forma


permanente en disco duro, el proceso consiste en trasladar los datos de un modelo
orientado a objetos a otro relacional. En java existen tres formas para logar
persistencia.

Métodos para lograr la persistencia

• Serialización: java.io.Serializable: que convierte los objetos en una serie de


bit almacenable en disco. Tiene la desventaja de que carece de lenguaje de
consulta y no da soporte a altas tasas de acceso concurrente.

• Java Data Connectivity: JDBC: Permite acceder a sistemas gestores de


Bases de datos relacionales, aunque su uso está muy extendido, la tendencia
es migrar a herramientas más potentes de mapeo de objetos relacional, esta
herramientas se base en delegar el acceso a la base de datos relacionales a
un framework, java define el modelo de programación para la persistencia de
entidades, pero deja su implementación a proveedores externos, entre los
que tenemos IBM con Hibernate.

• Herramientas de mapeo Objeto-Relacional (ORM) JPA: Se encarga de


automatizar la asignación de objetos java a tablas de bases de datos
relacionales, sustituyen a las entitys Beasn.

Figura No.2 Mapeo Relacional, Imagen tomada del sitio


http://blog.jhades.org/solving-orm-complexity-keep-the-o-drop-the-r-no-
need-for-the-m/

JPA trabaja a través de entities que son clases java también llamadas POJOS (Plain
Old Java Objects), no necesitan extender a ninguna otra clase o interface y se
definen a través de anotaciones en código que desarrollemos.

@entity: Sirve para indicar que una clase java es una entidad JPA.

Los proyectos que utilizan JPA requieren de una unidad de persistencia, entre las
que permite trabajar en el IDE Netbeans utilizaremos eclipse link por defecto.
Figura No. 3 Flujo de control del programa, Imagen tomada del sitio
http://theopentutorials.com/examples/java-ee/ejb3/how-to-create-ejb3-jpa-project-
in-eclipse-jboss-as-7-1/

Persistir consiste en guardar datos de un objeto java en una base datos, a través de
conectar una base datos mediante una conexión pool y una fuente de datos.

Java define en un modelo de programación de persistencia por el cual, solo es


necesario proporcionarle al motor de persistencia la clase entidad por cada clase de
la tabla de la base de datos.

Entidad son objetos que contienen información de mapeo que viven a corto plazo
en memora y persistentemente en base de datos, Java Persistence API dispone de
una interfaz llamada entity manager, con una serie de métodos para que podamos
operar con ese conjunto de entidades. Al conjunto de entidades asociadas con los
registros de una base de datos se le llama contexto de persistencia, es importante
resaltar que la aplicación lo que maneja son entidades del contexto de persistencia,
cualquier cambio se realice en estas entidades se trasladara automáticamente a la
base de datos subyacente de forma transparente para nuestro código.

INICIAREMOS MOSTRANDO UN EJEMPLO PARA LA CREACIÓN DE


ENTIDADES JPA

Inicialmente se debe crear un proyecto de aplicación Web, con el nombre


“ProyectoJAP”
Figura No. 4 Creación de una aplicación web, imagen generada por el autor desde
el IDE Netbeans

Clic en Next> y seleccionamos como frameworks javaServer Faces

Figura No. 5 Java Server Faces, imagen generada por el autor desde el IDE
Netbeans

Dejamos por defecto las demás opciones y damos clic en Finish.

Para crear una entity JPA creamos un nuevo archivo y buscamos dentro de la
categoría la opción de “Persistencia” y tipo de archivo “Entity Class”.
Figura No. 6 Creación de la Entity Class, imagen generada por el autor desde el
IDE Netbeans

Clic en botón Next>, asignamos nombre a la clase “Estudiante”, y creamos un


paquete llamado com.persistencia, verificamos que este seleccionado la opción
“Create Persistence Unit”, parra cada entity class se crea una unidad de persistencia
bajo un archivo xml y damos clic en Next>.
Figura No. 7 Nueva Entity Class, imagen generada por el autor desde el IDE
Netbeans

Asignamos un nombre a Persistence Unit Name o dejamos el que nos da por


defecto, en la opción Persistence Provider seleccionamos el proveedor “EclipseLink
(JPA 2.1)(default)” Elegimos la fuente de datos “Data Source”.
Figura No.8 Definición conexión a la Base de Datos, imagen generada por el autor
desde el IDE Netbeans

Data Source: JPA permite la conexión a la base de datos a través de una conexión
pool Java, agrupamiento de conexiones. Estas conexiones nunca se cierran ventaja
que tiene frente a JDBC y permiten tener la información del servidor, nombre de la
Base de datos, el usuario y clave de acceso a la base de datos.

Para esto en necesario utilizar una instancia de JEE de javax.sql, Interface


DataSource a través de la API (JNDI) Java Naming and Directory.

La interface DataSource, utilizaremos el método getConnection, el cual permite


tener una conexión a la base de datos.

Crearemos nuestra propia conexión a la base de datos.


Figura No. 9 Definición del Driver de la BD, imagen generada por el autor desde el
IDE Netbeans

Aquí encontraremos los Drivers para diferente fuente de datos entre los que
encontramos Microsoft, MySQL, Oracle OCI, PostgreSQL, etc. Para este ejemplo
elegimos “Java DB (Network)”, que significa Java Derby, se despliegan los driver
derbyclient.jar y el derby.jar necesarios para este ejemplo, damos clic en Next>.
Proporcionamos los datos de conexión, nombre y usuario a la base de datos.

Figura No. 10 Parámetros de la conexión a la BD, imagen generada por el autor


desde el IDE Netbeans
En la opción JDBC URL: agregamos a la línea
jdbc:derby://localhost:1527/DBproyectojpa; la instrucción de créate=true debido a
que la BD no existen para que Netbeans la cree, podemos probar la conexión en el
botón “Test Connection”. Damos clic en Next>.

Figura No. 11 Selección del esquema de la BD, imagen generada por el autor desde
el IDE Netbeans

Seleccionamos el esquema de la DB, por defecto aparece seleccionada APP.

Con esto damos clic en Next>, donde muestra al input de conection a la base de
dato, damos clic en Finish, luego en botón Ok.

En la opción Table Generation Strategy, seleccionamos Drop and Create lo que


permite cada vez que ejecutemos la aplicación borrar y crear la tabla de la base de
datos, pulsamos en el botón Finish.

A continuación se muestra el código generado por Netbeans, para la entity la cual


corresponde al archivo Estudainte.java. Con la anotación @Entity lo que significa
que es una clase entidad JPA.
@Id, es indicada para el
campo de acceso en JPA
es la llave primaria

@GenerateValue, permite generar


automáticamente la llave primaria JPA,
mediante la estrategia
GenetationType.AUTO

Figura No. 12 Anotaciones de la clave primaria, imagen generada por el autor desde
el IDE Netbeans
En el siguiente cuadro se muestra las diferentes opciones que se pueden utilizar
para cada GenetationType.AUTO.

Figura No. 13 Tipos de anotaciones de la entitys, imagen generada por el autor


desde el IDE Netbeans

Figura No. Extraída de docs.oracle.com/javaee/6/api opción GenarationType.

En el archivo Estudiante.java vamos adicionar los campos nombre y apellido de


forma private para la clase entity.
Figura No.14 Generación de los métodos Getter y Setter, imagen generada por el
autor desde el IDE Netbeans

Presionamos la tecla Alt + Insert, para crear los métodos Getter and Setter, de la
clase.

Figura No.15 Selección de atributos de la clase, imagen generada por el autor desde
el IDE Netbeans

Seleccionamos los campos y damos clic en Generar, dándonos como resultado los
métodos dentro de la clase Estudiante.java
DATA ACESS OBJECT DAO:

Cuando se desarrollan aplicaciones en Java JEE, en al algunas es necesario


acceder a los datos, a través de algún método, por persistencia (Hibernate, JDO,
iBatis), JDBC, un Fichero de Texto o LDAP, etc. Cuando tenemos varias opciones
para acceder a los datos puede ser un problema, la forma de acceder a los datos
muchas veces depende del fabricante y a la forma de almacenamiento que
utilicemos.

El Data Acess Object o patrón de diseño DAO, permite resolver este problema
abstrayendo y encapsulando el acceso a datos. El DAO se encarga de manejar la
conexión con la fuente de datos permitiendo acezar obteniendo y guardando de
forma persistente los datos.

A través del DAO este realiza operaciones de forma automáticas hacia la BD, no
son necesarias las transacciones, como ejemplos podemos mencionar las
búsquedas por ID, los procesos de creación, actualizado y borrado de registros,
consultas u otras operaciones que se realicen a menudo en la aplicación.

Lógica de persistencia
clases DAO

Figura No. 16 Data Acess Object (DAO), Imagen tomada del sitio
http://www.ibm.com/developerworks/library/j-dao/

Es necesario crear la clase controller JPA de la entity creada anteriormente


(Estudiante.java), las clases controller siguen el patrón de diseño DAO.

Para crear la clase damos clic en archivo, Nuevo Archivo y seleccionamos en la


categoría Persistence y en tipos de archivos seleccionamos JPA Controller Classes
from Entity Clases y clic en Next>.
Figura No. 17 Creación del archivo Clase Controller de la Entity Clase, imagen
generada por el autor desde el IDE Netbeans

Seleccionamos la Entity a la cual le vamos a crear la clase controller y clic en botón


add>, luego clic en botón Netx>.

Figura No. 18 Controlador de la Entity Class, imagen generada por el autor desde
el IDE Netbeans
Verificamos en nombre del proyecto, la ubicación del paquete com.presistencia y
damos clic en Finish.

Figura No.19 Clase Controlador, imagen generada por el autor desde el IDE
Netbeans

Nos crea el código de la clase controlador EstudianteJpaController.java, con los


métodos necesarios para interactuar con la lógica de persistencia de la entity en la
Base de datos, en este archivo encontramos los métodos:

public void créate: para crear un registro


public void edit: para editar los registros
public void destroy: para eliminar registros
public Estudiante findEstudiante: para buscar registros.
public List: para listar los registros.

Figura No. 20 Método créate, código creado por el autor desde el IDE Netbeans
Este método utiliza una instancia de la clase Estudiante como argumento, invocando
al método em.persist(estudiante) que pertenece a la clase getEntityManager.

Figura No. 22 Método editar, código creado por el autor desde el IDE Netbeans

Este método utiliza una instancia de la clase Estudiante como argumento, invocando
al método em.merge(estudiante) que pertenece a la clase getEntityManager.

Figura No. 23 Método destroy (Long id), código creado por el autor desde el IDE
Netbeans
Este método recibe un parámetro id, que es el campo principal de la entity para
recuperar el registro de la Base de Datos.

Figura No. 24 Métodos de recuperación de registros, código creado por el autor


desde el IDE Netbeans

CREANDO UNA APLICACIÓN PARTIENDO DESDE UN ESQUEMA DE BASE DE


DATOS

Esquema de base de datos: Es una representación gráfica de la estructura de la


Base de Datos.

El esquema de la base de datos puede estar representada de forma gráfica y a


través de un Script SQL.
Figura No. 25 Esquema grafico de la Base de datos, imagen generada por el autor

Esquema de la Base de Datos Script SQL

Figura No. 26 Esquema de la Base de Datos en Script SQL, imagen generada por
el autor

En Netbeans crearemos las entities JPA de modo automático a partir del esquema
y las aplicaciones Java Server Faces de las entidades JPA.

Abrimos el archivo universidad.sql, damos clic en File, Open Archivo y


seleccionamos universidad.sql, para crear la BD vamos la pestaña Services y
seleccionamos Java DB con el botón derecho del mouse, y damos clic en créate
Database ….
Figura No. 27 Creando la Base de Datos, imagen generada por el autor desde el
IDE Netbeans

Creamos la base de datos con los siguientes campos:

Figura No. 28 Parámetros de la Base de Datos, imagen generada por el autor desde
el IDE Netbeans

Base de datos: Universidad


User Name: univer1
Password: 123456

Ya tenemos la BD para ejecutar el esquema SQL para crear las tablas, para la
creación de las tablas desplegamos en jdbc:derby://localhost:1527/Universidad,
donde está la base de datos, damos clic en tables con el botón derecho del mouse
y seleccionamos créate table….

Adicionamos cada table de nuestra base datos para nuestro ejercicio vamos a crear
las tablas estudiantes, materia, nota, como muestra la figura.
Figura No. 29 Estructura de la Base de Datos, imagen generada por el autor desde
el IDE Netbeans

PERSISTENCIA EN NIVEL WEB

Para crear las entities de la base de datos vamos a crear un proyecto web
application, para esto creamos nuevo proyecto

Inicialmente se debe crear un proyecto de aplicación Web, con el nombre


“UniversidadJPA”
Figura No. 30 Creación de una aplicación web, imagen generada por el autor desde
el IDE Netbeans

Clic en Next> y seleccionamos como frameworks javaServer Faces

Figura No. 31 Frameworks JavaServer Faces, imagen generada por el autor desde
el IDE Netbeans

Dejamos por defecto las demás opciones y damos clic en Finish.

Para crear una entity JPA creamos un nuevo archivo y buscamos dentro de la
categoría la opción de “Persistencia” y tipo de archivo “Entity Class”.
Clic en botón Next>, asignamos nombre a la clase “Estudiante”, y creamos un
paquete llamado com.persistencia, verificamos que este seleccionado la opción
“Create Persistence Unit”, parra cada entity class se crea una unidad de persistencia
bajo un archivo xmly damos clic en Next>.

Crear las entities de la base de datos creamos un archivo nuevo, clic en file –> New
File, seleccionamos la categoria “Persistence” y en tipos de archivos “Entity Classes
from Database”. Clic en Next>.

Figura No. 32 Creando archivo entity Classes from Database, imagen generada
por el autor desde el IDE Netbeans

Escogemos la opción de “New Data Sourde” de la ventana Data Source para asignar
la fuente de la base de datos.

Figura No. 33 Nueva fuente de datos, imagen generada por el autor desde el IDE
Netbeans
Asignamos un nombre al JNDI Name: y seleccionamos la conexión a la Base de
Datos.

Figura No. 34 Selección del jdbc:derby, imagen generada por el autor desde el IDE
Netbeans

Nos carga la tablas que integran la base de datos, las cuales seleccionamos y add
all >>. Y clic en Next>>.

Figura No. 35 Selección tablas de la base de datos, imagen generada por el autor
desde el IDE Netbeans

En la ventana siguiente nos permite cambiar el nombre de las clases de cada tabla
de la base datos, las dejamos por defecto, creamos un paquete para las clases.
“com.jpa”. clic en Next>> y Finish.
Figura No. 36 Clases Entity, imagen generada por el autor desde el IDE Netbeans

Podemos observar en el proyecto la creación de las entities para cada una de las
tablas que conforma la base de datos.

Figura No. 37 Proyecto con lista de clases de las entidades de la tabla, imagen
generada por el autor desde el IDE Netbeans
Ahora crearemos las aplicaciones JSF para cada una de las entidades JPA.

Para esto creamos un nuevo archivo file -> New file, seleccionamos la categoria
JavaServer Faces y en tipos de archivos seleccionamos JSF Pages from Entity
Classes.

Figura No. 38 Creación de las Pages from Entity Classes, imagen generada por el
autor desde el IDE Netbeans

En la siguiente ventana nos permite seleccionar las entities para la creación de las
páginas.
Figura No. 39 Selección de las entities JPA, imagen generada por el autor desde el
IDE Netbeans

Verificamos el nombre del proyecto y podemos cambiar los paquetes para los
Session Bean Package y las Classes Package de la aplicación, las Sessions Bean
es el encargado de la controlar la lógico del modelo con la base de datos. Y clic en
Finish.

Figura No. 40 Definición del package de la Sessión Bean y las Classes Package,
imagen generada por el autor desde el IDE Netbeans
Ya tenemos nuestra aplicación con los archivos generados de cada una las entities
JPA, los controladores, las páginas web para cada entidad (Create.xhtml, Edit.xhtml,
List.xhtml, View.xhtml). Aplicación CRUD, la cual podemos ejecutar para ver su
funcionamiento.

Figura No. 41 Estructura de archivos de la aplicación UnivesidadJPA, imagen


generada por el autor desde el IDE Netbeans

También podría gustarte