20. JPA. Bases de datos¶
Guía de inicio Video tutorial Vamos a crear un ejemplo usando el gestor de base de datos en memoria "H2"
20.1 Java Persistence API (JPA)¶
Java Persistence API (JPA) es una especificación de Java para acceder, persistir y gestionar datos entre objetos Java y bases de datos relacionales. Forma parte del estándar de Java EE (Enterprise Edition) pero también puede utilizarse en aplicaciones Java SE (Standard Edition).
20.1.1 Características Principales¶
-
ORM (Object-Relational Mapping)
- Permite mapear objetos Java a tablas de bases de datos y viceversa.
-
JPQL (Java Persistence Query Language)
- Un lenguaje de consulta orientado a objetos para realizar operaciones de base de datos.
-
Transacciones
- Proporciona un mecanismo para gestionar transacciones de manera más fácil y coherente.
-
Caching
- Tiene capacidades de almacenamiento en caché para mejorar el rendimiento.
-
Portabilidad
- Diseñado para ser independiente del proveedor de la base de datos, lo que facilita la portabilidad del código.
20.1.2 Componentes¶
-
EntityManager
- Se encarga de las operaciones CRUD (crear, leer, actualizar, eliminar).
-
Entity
- Clases Java anotadas que representan tablas en una base de datos.
-
Persistence Unit
- Define la configuración para conectarse a una base de datos específica.
20.1.3 Proveedores¶
Existen diversos proveedores de JPA como Hibernate, EclipseLink y OpenJPA, que implementan la especificación y ofrecen características adicionales.
En resumen, JPA simplifica la persistencia de datos en aplicaciones Java, permitiendo un código más limpio y mantenible.
20.2 Ejemplo. Inicio del proyecto.¶
En VSCode, shift+ctl+P para comandos. Seleccionar Java Proyecto Se puede usar maven y en este caso de crear la estructura de proyecto , incluido pom.xml.
20.2.1 Configuración maven¶
Seleccionamos la versión Java 8 cambiando:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
En la web de central repository de maven encontramos las dependencias que necesitamos. Desde VSCode se busca en este repository con la pestaña de maven->dependecy de VSCode.
Vamos a ver JPA con Hibernate. buscamos hibernate core
y copiamos la dependencia. Ejemplo:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.0.CR4</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.4.0.GA</version>
<type>pom</type>
</dependency>
Libreria JPA (ya viene en JEE): Javax persistence API.
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>test</scope>
</dependency>
20.2.2 Configurar hibernate¶
Creamos la carpeta resource/META-INF
en src/main
y dentro el fichero persistence.xmml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="MiPersistencia">
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
</persistence>
Etiqueta "persistence" y los parámetros en persistence-uni. El nombre que ponemos aquí (MiPersistencia) lo usaremos en el codigo java al inicializar el gestor de persistencia
- Dialecto, consultando en [web hibernate] (https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/dialect/H2Dialect.html)
- hibernate.hbm2ddl.auto" create | create-drop, etc ver doc
20.3 Programa Java¶
Creamos una clase por cada tabla (entidad) usando anotaciones @Entity @Table @Column etc (de javax.persistence) Por ejemplo clase Empleado
Actualizamos el fichero "persistence.xml"
<persistence-unit name="MiPersistencia">
<class>edu.modelo.empleado</class>