CodeGym /Cursos /Módulo 5. Spring /Introducción a Spring Data JPA y al trabajo con bases de ...

Introducción a Spring Data JPA y al trabajo con bases de datos

Módulo 5. Spring
Nivel 5 , Lección 0
Disponible

Hoy nos meteremos con el trabajo con bases de datos, pasando al siguiente módulo importante de Spring — Spring Data JPA.


Fundamentos del trabajo con datos en aplicaciones

Los datos son el corazón de cualquier aplicación. Las tiendas online guardan pedidos, los bancos en línea — transacciones, las redes sociales — posts y comentarios. Sin un almacenamiento fiable de los datos, la aplicación se queda como un escarabajo de mayo: no recuerda nada y con cada reinicio empieza de cero. Por eso las bases de datos juegan un papel clave: estructuran, guardan y permiten trabajar eficientemente con la información incluso con millones de registros.

ORM y JPA: tu puente entre el mundo de los objetos y las tablas

Trabajar con bases de datos usando SQL puro — mola, pero solo hasta que tienes que actualizar 10 mil líneas de código tras cambios en las tablas. Aquí entra en acción ORM — Object Relational Mapping. Es la tecnología que transforma las tablas de la base de datos en objetos Java y viceversa.

JPA (Java Persistence API) — es el estándar en el mundo Java para trabajar con ORM. Sin embargo, si pensaste: "Genial, ¡ahora escribo menos código!", espera un momento. Sin una implementación de JPA esto sería solo una interfaz (y no de las que nos molan). Necesitamos un héroe. Y aquí aparece Hibernate.


Spring Data JPA

Spring Data JPA — es una varita mágica que une JPA con la sencillez y la automatización de Spring. Por eso importa tanto:

  1. ¡Automatización, colega! Puedes prácticamente no escribir SQL a mano. Spring Data JPA los genera por ti.
  2. Facilidad de uso. Trabajar con datos ahora es tan fácil como llamar al método findAll().
  3. Integración estándar. Todo esto se configura sobre lo que ya hemos visto en Spring Boot.

Conceptos principales

  1. Entidades (Entities): son tus objetos que estarán ligados a tablas en la base de datos.
  2. Repositorios (Repositories): interfaces que simplifican la obtención de datos. Ya saben hacer magia como save(), findById() y deleteAll().
  3. EntityManager: herramienta central para gestionar el ciclo de vida de las entidades. De verdad, funciona entre bambalinas y casi no tendremos que usarlo directamente.
  4. Transacciones: permiten ejecutar operaciones en la base de datos de forma atómica. Si algo falla, se pueden revertir todos los cambios.

Estructura de Spring Data JPA

Trabajar con Spring Data JPA consiste en los siguientes pasos:

  1. Conexión a la base de datos. Indicamos los parámetros de conexión (URL, usuario, contraseña) en application.properties. Spring Boot se encargará de todo.
  2. Creación de entidades (Entities). Usamos anotaciones JPA como @Entity para decir qué clase Java corresponde a una tabla en la base de datos.
  3. Uso de repositorios (Repositories). Aquí empieza la magia. Creamos interfaces que extienden de JpaRepository, y desde ahí puedes trabajar con tablas como si fuesen objetos normales.

Práctica: ¿cómo se ve en el código?

Primero hay que conectarse a la base de datos. Pero antes... crea un proyecto Spring Boot. Sí, ahora eso es nuestra rutina.

1. Configuración de la conexión en application.properties


# Parámetros de conexión a la base de datos
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

Usamos la base H2 embebida para practicar. Es "temporal", pero así no tenemos que instalar nada.


2. Creación de la entidad (Entity)

Aquí tienes un ejemplo de la entidad User, que corresponderá a la tabla users en la base de datos:


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity // Decimos que esta clase corresponde a una tabla en la base de datos
public class User {

    @Id // Indicamos que esto es la clave primaria
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Generación automática de ID
    private Long id;

    private String name;

    private String email;

    // Getters y setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

La clase User creará en la base de datos la tabla users con las columnas id, name y email.


3. Creación del repositorio (Repository)

El repositorio es la interfaz que nos permite interactuar con la base de datos sin escribir SQL:


import org.springframework.data.jpa.repository.JpaRepository;

// JpaRepository añadirá automáticamente métodos básicos como save(), findById(), findAll()
public interface UserRepository extends JpaRepository<User, Long> {
}

4. Trabajo con datos en el controlador

Supongamos que tenemos un controlador que permite añadir y obtener usuarios:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user); // Guardamos en la base de datos
    }

    @GetMapping
    public List<User> getUsers() {
        return userRepository.findAll(); // Devolvemos todos los usuarios
    }
}

Ahora tenemos una integración funcional con la base de datos. Puedes enviar una petición HTTP POST a /users para crear un nuevo usuario, o un GET a la misma ruta para obtener todos los usuarios.


¿Cómo ayuda esto en la vida real?

Imagínate una tienda online: necesitas guardar datos de productos, pedidos, clientes. En cada paso tienes que consultar la base de datos. Usar Spring Data JPA te permite centrarte en la lógica de la aplicación, no en escribir SQL. Ahorras tiempo, evitas la rutina y reduces la probabilidad de errores.


Errores típicos de los estudiantes

  1. Falta de la dependencia en pom.xml. No olvides añadir spring-boot-starter-data-jpa.
  2. Configuración incorrecta de la base de datos. Uno de los errores más comunes es no especificar parámetros en application.properties, como spring.datasource.url.
  3. Errores en las anotaciones. A veces se olvida la anotación @Entity en la clase o @Id en el campo.
  4. Carga ansiosa de datos en tablas grandes. Hablaremos de esto en una de las próximas lecciones.

Trastea con este código, intenta añadir nuevos usuarios y experimenta un poco. Solo estamos empezando a profundizar en el trabajo con datos, así que relájate y disfruta de esta magia de ORM.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION