Curso de Java y Aplicaciones Web

53
Curso de Java y Aplicaciones Web Facultad Politécnica – U.N.A. Ing. Esteban Ramírez [email protected] Persistencia Java

description

Curso de Java y Aplicaciones Web. Persistencia Java. Facultad Politécnica – U.N.A. Ing. Esteban Ramírez [email protected]. Objetivos. Curso de Java y Aplicaciones Web. Java persistence api - JPA. Frameworks. Ciclo de vida de entidades. JPQL. Hibernate. Java Persistence API. - PowerPoint PPT Presentation

Transcript of Curso de Java y Aplicaciones Web

Page 1: Curso de Java y Aplicaciones Web

Curso de Java y Aplicaciones Web

Facultad Politécnica – U.N.A.

Ing. Esteban Ramí[email protected]

Persistencia Java

Page 2: Curso de Java y Aplicaciones Web

Objetivos

Hibernate

JPQL

Ciclo de vida de entidades

Frameworks

Java persistence api - JPA

Curso de Java y Aplicaciones Web

Page 3: Curso de Java y Aplicaciones Web

3

Java Persistence API

Se llama “persistencia” de los objetos java a su capacidad para guardarse y recuperarse desde

un medio de almacenamiento.

La persistencia en Base de Datos relacionales se suele implementar mediante el desarrollo de funcionalidad específica utilizando la tecnología JDBC - Java Database Connectivity o mediante frameworks que automatizan el proceso a partir de mapeos (conocidos como Object Relational Mapping, ORM).

JPA (Java Persistence Api) Proporciona un estándar para gestionar datos relacionales en aplicaciones Java SE o Java EE, de forma que además se simplifique el desarrollo de la persistencia de objetos java.

Es una API de persistencia de POJOs (Plain Old Java Object). Es decir, objetos simples que no heredan ni implementan otras clases excepto Object.

Page 4: Curso de Java y Aplicaciones Web

4

Frameworks – JPA providers

Page 5: Curso de Java y Aplicaciones Web

5

Frameworks – JPA providers

Page 6: Curso de Java y Aplicaciones Web

Motores de Bases de datos

6

Page 7: Curso de Java y Aplicaciones Web

Motores de Bases de datos

7

Page 9: Curso de Java y Aplicaciones Web

9

JPA: Java Persistence API

El mapeo objeto-relacional (es decir, la relación entre entidades Java y tablas de la base de datos, queries con nombre, etc) se realiza mediante anotaciones en las propias clases de entidad.

No se requieren ficheros descriptores XML.

También pueden definirse transacciones como anotaciones JPA.

@anotación

Page 10: Curso de Java y Aplicaciones Web

10

JPA: Java Persistence API

@Anotaciones

Mapeo Lógico

Mapeo Físico

Permiten describir modelo de objeto, asociaciones de clase, etc

Describen esquemas físicos de base de datos, tablas, columnas, índices, etc.

@OneToOne, @OneToMany, etc @Column, @JoinColumn, etc

Page 11: Curso de Java y Aplicaciones Web

JPA: Arquitectura

El siguiente diagrama muestra la relación entre los componentes principales de la arquitectura de JPA:

11

Page 12: Curso de Java y Aplicaciones Web

12

JPA: Excepciones

Page 13: Curso de Java y Aplicaciones Web

13

JPA: entidad

Una entidad es un objeto de dominio de persistencia. Normalmente, una entidad representa una tabla en el modelo de datos relacional y cada instancia de esta entidad corresponde a un registro en esa tabla

Page 14: Curso de Java y Aplicaciones Web

JPA: entidad

@Entitypublic class Empleado implements Serializable {

private Long id; //setId getId public Empleado(){ … }

}

La clase debe poseer en su encabezado la anotación javax.persistence.Entity @Entity

La clase debe poseer un constructor PUBLIC,PROTECTED sin argumentos

Ningún método o variables de instancias deben ser declaradas como FINAL

La clase no debe ser declarada como FINAL

Si una instancia de una entidad entra en entornos remotos ,debe implementar la interfaz SERIALIZABLE

Los atributos persistentes de la clase deben ser declarados como PRIVATE, PROTECTED y solo deben ser accesadas por los métodos de la clase

14

Page 15: Curso de Java y Aplicaciones Web

15

JPA: entidad

El estado persistente de una entidad puede ser accesible a través de variables de instancia a la entidad o bien a través de las propiedades de estilo de JavaBean (Setters and Getters). Los campos o propiedades pueden tener asociados los siguientes tipos Java:

• Tipos primitivos de Java (int,long,double,etc)• java.lang.String • Otro tipo de objeto serializable, incluyendo:

• Wrappers de tipos primitivos en Java (Integer,Long,Double,etc)• java.math.BigInteger • java.math.BigDecimal • java.util.Date • java.util.Calendar • java.sql.Date • java.sql.Time • java.sql.TimeStamp • User-defined serializable types • byte [ ]• Byte [ ]• char [ ]• Character [ ]• Tipos enumerados (Enumeration) • Otras entidades y/o colecciones de entidades

Page 16: Curso de Java y Aplicaciones Web

16

JPA: entidad

Campos Persistentes

Propiedades Persistentes

Page 17: Curso de Java y Aplicaciones Web

17

JPA: entidad

Las colecciones posibles son:

• java.util.Collection

• java.util.Set

• java.util.List

• java.util.Map

Las variables genéricas de estos tipos también pueden ser utilizadas

Page 18: Curso de Java y Aplicaciones Web

18

JPA: entidad - asociaciones

@OneToOneCada entidad se relaciona con una sola instancia de otra entidad. Donde la ambas se referencian por la misma llave PK.

@OneToManyUna entidad, puede estar relacionada con varias instancias de otras entidades

@ManyToOneMúltiples instancias de una entidad pueden estar relacionadas con una sola instancia de otra entidad. Esta multiplicidad es lo contrario a la relación uno a muchos. Usado también como si fuera una relación OneToOne

@ManyToManyEn este caso varias instancias de una entidad pueden relacionarse con múltiples instancias de otras entidades.

Page 19: Curso de Java y Aplicaciones Web

19

JPA: entidad - asociaciones

@one-to-one

@Entity@Table(name=“usuarios”)public class Usuario implements Serializable { …//username password id @OneToOne @JoinColumn(name=“id") private Persona persona; //setter and getter

}

@Entity@Table(name=“personas”)public class Persona implements Serializable { …//id nombre apellido fechaNacimiento

}

Page 20: Curso de Java y Aplicaciones Web

20

JPA: entidad - asociaciones

@OneToOneCada entidad se relaciona con una sola instancia de otra entidad. Donde la ambas se referencian por la misma llave PK.

@OneToManyUna entidad, puede estar relacionada con varias instancias de otras entidades

@ManyToOneMúltiples instancias de una entidad pueden estar relacionadas con una sola instancia de otra entidad. Esta multiplicidad es lo contrario a la relación uno a muchos. Usado también como si fuera una relación OneToOne

@ManyToManyEn este caso varias instancias de una entidad pueden relacionarse con múltiples instancias de otras entidades.

Page 21: Curso de Java y Aplicaciones Web

21

JPA: entidad - asociaciones

@one-to-many

@Entity@Table(name=“paises”)public class Pais implements Serializable { … @OneToMany(mappedBy="pais",targetEntity=Ciudad.class) private Set<Ciudad>ciudades; }

Page 22: Curso de Java y Aplicaciones Web

22

JPA: entidad - asociaciones

@OneToOneCada entidad se relaciona con una sola instancia de otra entidad. Donde la ambas se referencian por la misma llave PK.

@OneToManyUna entidad, puede estar relacionada con varias instancias de otras entidades

@ManyToOneMúltiples instancias de una entidad pueden estar relacionadas con una sola instancia de otra entidad. Esta multiplicidad es lo contrario a la relación uno a muchos. Usado también como si fuera una relación OneToOne

@ManyToManyEn este caso varias instancias de una entidad pueden relacionarse con múltiples instancias de otras entidades.

Page 23: Curso de Java y Aplicaciones Web

23

JPA: entidad - asociaciones

@Many-to-One

@Entity@Table(name=“ciudades”)public class Ciudad implements Serializable { … @ManyToOne @JoinColumn(name="fk_pais") private Pais pais; }

Page 24: Curso de Java y Aplicaciones Web

24

JPA: entidad - asociaciones

@OneToOneCada entidad se relaciona con una sola instancia de otra entidad. Donde la ambas se referencian por la misma llave PK.

@OneToManyUna entidad, puede estar relacionada con varias instancias de otras entidades

@ManyToOneMúltiples instancias de una entidad pueden estar relacionadas con una sola instancia de otra entidad. Esta multiplicidad es lo contrario a la relación uno a muchos. Usado también como si fuera una relación OneToOne

@ManyToManyEn este caso varias instancias de una entidad pueden relacionarse con múltiples instancias de otras entidades.

Page 25: Curso de Java y Aplicaciones Web

25

JPA: entidad - asociaciones

@Many-to-Many

@Entity@Table(name=“estudiantes”)public class Estudiante implements Serializable { … @ManyToMany @JoinTable(name="estudiante_cursos", joinColumns=@JoinColumn(name="fk_estudiante"), inverseJoinColumns=@JoinColumn(name="fk_curso")) private Set<Curso>cursos; }

Page 26: Curso de Java y Aplicaciones Web

26

Ciclo de vida de una entidad

Page 27: Curso de Java y Aplicaciones Web

27

Operaciones con entidades

Page 28: Curso de Java y Aplicaciones Web

28

Ciclo de vida de una entidad

Page 29: Curso de Java y Aplicaciones Web

29

Operaciones con entidades

Page 30: Curso de Java y Aplicaciones Web

30

Operaciones con entidades

Page 31: Curso de Java y Aplicaciones Web

Operaciones con entidades

Base de datos

Flush() Refresh()

flush()Sincroniza los datos de una entidad y los hace persistentes en la base de datos.

refresh()Contrario al flush() ,este método vuelve a cargar los datos originales de la base de datos a la entidad.

31

Page 32: Curso de Java y Aplicaciones Web

32

JPA: Arquitectura

javax.persistance

Persistance.xml

EntityManagerFactory

EntityManager EntityManager

• Persistance Unit Name• Persistance Library(Provider)• Entities• Provider settings

Page 33: Curso de Java y Aplicaciones Web

JPA – Estructura de Proyecto

Archivo de configuración del motor de persistencia persistence,xml

33

Page 34: Curso de Java y Aplicaciones Web

34

JPA – Estructura de Proyecto

Clase Persona.java

Tabla en base de datos

Page 35: Curso de Java y Aplicaciones Web

35

JPA – Estructura de Proyecto

Creación de la clase Persona.java

Page 36: Curso de Java y Aplicaciones Web

36

JPA – Estructura de Proyecto

Creacion del EMF (EntityManagerFactory)

Page 37: Curso de Java y Aplicaciones Web

37

Java Persistence Query Language (JPQL)

Page 38: Curso de Java y Aplicaciones Web

38

Java Persistence Query Language (JPQL)

Page 39: Curso de Java y Aplicaciones Web

Java Persistence Query Language (JPQL)

Clausulas :FROMExisten varias formas de simplificar una clase a la hora de realizar la consulta hql> FROM mx.model.Empleado hql> FROM EmpleadoDando como resultado una colección de objetos de tipo Empleado

SELECTla clausula SELECT selecciona cual(es) objeto (s)y cual (es) propiedad(es) se retornara en el resultado del query. hql> SELECT v.marca FROM Vehiculo as v hql> SELECT v.marca FROM Vehiculo v WHERE v.marca like ‘toy%’ hql> SELECT user.persona.nombre FROM Usuario user hql> SELECT user.username,p.nombre FROM Usuario user,Persona pLa anterior consulta nos retorna Object[ ]

WHEREAyuda a filtrar la lista de instancias retornadas. hql> FROM Usuario user WHERE user.username = ‘rcuello’ hql> FROM Usuario user WHERE user.persona.cedula=123456 hql> FROM Usuario user WHERE username.username IS NOT NULL

ORDER BYLa lista retornada por una consulta puede ser ordenada por cualquier propiedad de un objeto. hql> FROM Empleado emp ORDER BY emp.nombre asc

39

Page 40: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Crear una aplicación java con la siguiente estructura:

PersonaIdNombreApellidoCedulafechaNacimiento

Page 41: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Entidad Persona

Page 42: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Persistence

Page 43: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Tabla en Postgres

PersonaIdNombreApellidoCedulafechaNacimiento

Page 44: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Tabla en Postgres

Page 45: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Clase de prueba.

Page 46: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Agregar una o más fichas de contacto a cada persona.

FichaContactoIdTelefonoCalle

PersonaIdNombreApellidoCedulafechaNacimiento

1

n

Page 47: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Tabla ficha de Cantacto

Page 48: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Clase nueva FichaContacto

Page 49: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Modificar clase Persona

Page 50: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Agregar la nueva entidad a Persistence

Page 51: Curso de Java y Aplicaciones Web

Practica JPACurso de Java y Aplicaciones Web

Clase de prueba

Creamos la persona.

Creamos la ficha 1 para Persona.

Creamos la ficha 2 para Persona.

Page 52: Curso de Java y Aplicaciones Web

Práctica 2

Mapear la clase curso y profesor como entidades.

Crear tablas en el Postgres para almacenar los valores.

Agregar un nuevo menú a GestionAcademicaWeb3 de “Guardar” para persistir los valores en BD.

Curso de Java y Aplicaciones Web

Page 53: Curso de Java y Aplicaciones Web

Curso de Java y Aplicaciones Web.

Ing. Esteban Ramí[email protected]