Saltar a contenido

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

  1. ORM (Object-Relational Mapping)

    • Permite mapear objetos Java a tablas de bases de datos y viceversa.
  2. JPQL (Java Persistence Query Language)

    • Un lenguaje de consulta orientado a objetos para realizar operaciones de base de datos.
  3. Transacciones

    • Proporciona un mecanismo para gestionar transacciones de manera más fácil y coherente.
  4. Caching

    • Tiene capacidades de almacenamiento en caché para mejorar el rendimiento.
  5. 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>
Tambien hibernate entityManager,
<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>
Base de datos en memoria H2 .

<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

persitence.xml
<?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>
Explicación:
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>