Curso de Java y Aplicaciones Web
-
Upload
trevor-lloyd -
Category
Documents
-
view
57 -
download
0
description
Transcript of 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
Objetivos
Hibernate
JPQL
Ciclo de vida de entidades
Frameworks
Java persistence api - JPA
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.
4
Frameworks – JPA providers
5
Frameworks – JPA providers
Motores de Bases de datos
6
Motores de Bases de datos
7
8
Motores de Bases de datos
FRAMEWORK
JPA
Provider
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
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
JPA: Arquitectura
El siguiente diagrama muestra la relación entre los componentes principales de la arquitectura de JPA:
11
12
JPA: Excepciones
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
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
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
16
JPA: entidad
Campos Persistentes
Propiedades Persistentes
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
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.
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
}
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.
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; }
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.
23
JPA: entidad - asociaciones
@Many-to-One
@Entity@Table(name=“ciudades”)public class Ciudad implements Serializable { … @ManyToOne @JoinColumn(name="fk_pais") private Pais pais; }
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.
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; }
26
Ciclo de vida de una entidad
27
Operaciones con entidades
28
Ciclo de vida de una entidad
29
Operaciones con entidades
30
Operaciones con entidades
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
32
JPA: Arquitectura
javax.persistance
Persistance.xml
EntityManagerFactory
EntityManager EntityManager
• Persistance Unit Name• Persistance Library(Provider)• Entities• Provider settings
JPA – Estructura de Proyecto
Archivo de configuración del motor de persistencia persistence,xml
33
34
JPA – Estructura de Proyecto
Clase Persona.java
Tabla en base de datos
35
JPA – Estructura de Proyecto
Creación de la clase Persona.java
36
JPA – Estructura de Proyecto
Creacion del EMF (EntityManagerFactory)
37
Java Persistence Query Language (JPQL)
38
Java Persistence Query Language (JPQL)
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
Practica JPACurso de Java y Aplicaciones Web
Crear una aplicación java con la siguiente estructura:
PersonaIdNombreApellidoCedulafechaNacimiento
Practica JPACurso de Java y Aplicaciones Web
Entidad Persona
Practica JPACurso de Java y Aplicaciones Web
Persistence
Practica JPACurso de Java y Aplicaciones Web
Tabla en Postgres
PersonaIdNombreApellidoCedulafechaNacimiento
Practica JPACurso de Java y Aplicaciones Web
Tabla en Postgres
Practica JPACurso de Java y Aplicaciones Web
Clase de prueba.
Practica JPACurso de Java y Aplicaciones Web
Agregar una o más fichas de contacto a cada persona.
FichaContactoIdTelefonoCalle
PersonaIdNombreApellidoCedulafechaNacimiento
1
n
Practica JPACurso de Java y Aplicaciones Web
Tabla ficha de Cantacto
Practica JPACurso de Java y Aplicaciones Web
Clase nueva FichaContacto
Practica JPACurso de Java y Aplicaciones Web
Modificar clase Persona
Practica JPACurso de Java y Aplicaciones Web
Agregar la nueva entidad a Persistence
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.
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
Curso de Java y Aplicaciones Web.
Ing. Esteban Ramí[email protected]