Guardar y Actualizar Registros con Spring Data Repositories
Clase 8 de 25 • Curso de Java Spring Data JPA: Bases de Datos
Contenido del curso
Primeros pasos
Spring Data Repositories
- 7

Uso de Spring Data Repositories para Gestión de Datos
08:39 min - 8

Guardar y Actualizar Registros con Spring Data Repositories
Viendo ahora - 9

Eliminar elementos con Spring Data JPA: método deleteById
05:36 min - 10

Gestión de Relaciones en JPA: Lazy vs Eager Fetching
15:09 min - 11

Query Methods en Spring para Consultas Personalizadas
08:28 min - 12

Filtrado de Pizzas por Ingredientes usando Query Methods
07:27 min - 13

Consultas Avanzadas con Query Methods en Java Spring
11:25 min - 14

Uso de Query Methods para Filtrar y Ordenar Datos en Spring
09:30 min - 15

Paginación y Ordenación con Spring Data Repositories
07:39 min - 16

Ordenamiento Dinámico con Paging and Sorting Repository
07:58 min
Personalización de queries
- 17

Consultas de Base de Datos con JPQL en Spring Boot
08:01 min - 18

Consultas SQL nativas y ordenación con Hibernate en Spring Data
08:26 min - 19

Uso de Proyecciones en Queries Personalizados con Java y SQL
13:47 min - 20

Actualización de Precios de Pizza con Spring Data JPA
11:50 min - 21

Propiedades ACID y Spring Data: Uso de @Transactional
10:07 min
Características avanzadas
Próximos pasos
¿Cómo guardar una nueva pizza en la base de datos?
El mundo del desarrollo de software con Spring Data Repositories tiene un objetivo claro: simplificar los procesos. Imagina lo fácil que es ahora trabajar con bases de datos gracias a las funcionalidades CRUD que estas herramientas nos ofrecen. En esta ocasión, te guiaré en cómo crear un nuevo registro de pizza en la base de datos usando Spring Repositories. Vamos al grano con ejemplos prácticos.
Para comenzar, necesitamos crear un método en PizzaService. Este método será público, retornará un objeto de tipo PizzaEntity y lo llamaremos save. Aquí está el fragmento de código para hacer esto:
public PizzaEntity save(PizzaEntity pizza) {
return this.pizzaRepository.save(pizza);
}
Con una simple línea, logramos insertar un elemento en la base de datos. ¿No es increíble?
¿Cómo gestionar peticiones POST en el controlador?
Ahora, en el PizzaController, necesitamos un método similar al anterior pero enfocado en manejar las peticiones POST. Aquí es donde el concepto de manejo de solicitudes HTTP cobra vida. Renombraremos este método a add y lo anotaremos con @PostMapping para que reciba peticiones del tipo POST. Además, usaremos @RequestBody para capturar el cuerpo de la solicitud que incluirá la entidad PizzaEntity.
@PostMapping("/add")
public PizzaEntity add(@RequestBody PizzaEntity pizza) {
return this.pizzaService.save(pizza);
}
Cuando hacemos una petición POST a nuestro endpoint, estaremos enviando un JSON con los detalles de la pizza. Por ejemplo: nombre, descripción, precio, si es vegana o vegetariana, y su disponibilidad.
Al lanzar la aplicación y enviar esta solicitud, podrás ver que la respuesta te devuelve la pizza creada, con un campo ID que no teníamos antes. Esto es porque el ID se genera automáticamente al guardar el registro.
¿Cómo manejar actualizaciones de registros existentes?
Sin embargo, no siempre queremos agregar una nueva pizza; a veces, solo necesitamos actualizar una existente. Aquí es donde Spring Data brilla al verificar si la información en la base de datos cambió. De no ser así, evita actualizar para ahorrar recursos.
Para diferenciar entre crear y actualizar, proponemos crear un método en PizzaController llamado update. Adornado con @PutMapping, este método decidirá entre requerir un POST para guardar datos nuevos y un PUT para actualizaciones. Incluiremos aquí también la verificación de existencia de pizzas con una llamada a existsById.
@PutMapping("/update")
public ResponseEntity<?> update(@RequestBody PizzaEntity pizza) {
if (pizza.getIdPizza() != null && this.pizzaService.exists(pizza.getIdPizza())) {
return new ResponseEntity<>(this.pizzaService.save(pizza), HttpStatus.OK);
}
return new ResponseEntity<>("Pizza not found or invalid request", HttpStatus.BAD_REQUEST);
}
Este ejemplo muestra cómo validar si la pizza ya existe antes de proceder. En caso contrario, retorna un error 400 Bad Request.
Spring, gracias al save, internamente decide entre un INSERT para registros nuevos o un UPDATE para actualizaciones.
¿Qué ventajas nos otorgan los Spring Data Repositories?
Lo maravilloso de Spring Data es que automatiza muchas operaciones cruciales, como detectar cambios en la información almacenada. Además, si una pizza ya existe, no ejecutará una acción innecesaria.
Dentro del servicio, hemos creado un método exists que retorna un booleano:
public boolean exists(Long idPizza) {
return this.pizzaRepository.existsById(idPizza);
}
Este método hace una consulta COUNT y determina si un registro con el ID proporcionado existe. Esta es la magia de Spring Data: facilita las tareas más tediosas y permite que los desarrolladores se concentren más en la lógica de negocios.
Sigue explorando las capacidades de Spring y aprovéchalas en tus proyectos. ¡El aprendizaje es continuo y las oportunidades para mejorar siempre están al alcance!