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
08:34 min - 9

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

Lazy vs Eager en relaciones JPA
15:09 min - 11

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

Filtrar pizzas con Containing y Not en JPA
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
Viendo ahora - 15

Paginación y Ordenación con Spring Data Repositories
07:38 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

Projections con JPA para queries de varias tablas
13:45 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:06 min
Características avanzadas
Próximos pasos
Uso de Query Methods para Filtrar y Ordenar Datos en Spring
Resumen
¿Cómo limitar registros con Query Methods en Spring?
Limitar registros al consultar bases de datos es una tarea fundamental para optimizar la performance de nuestras aplicaciones. En Spring, podemos lograrlo a través de los Query Methods. Estos métodos no solo nos permiten recuperar una cantidad específica de registros, sino también usar elementos de programación funcional como Optional para manejar respuestas.
Veamos cómo podemos implementar estas funcionalidades en un ejemplo práctico usando un proyecto de pizzería.
¿Cómo asegurarse de que solo un registro se recupere con Query Methods?
Para limitar la recuperación a un solo registro, no usaremos findAll, sino findFirst. Este método devuelve el primer registro que coincide con las condiciones definidas. En caso de necesitar más de un registro, findTop es la alternativa. Ambos métodos sirven para garantizar el manejo preciso de los datos.
Ejemplo de implementación:
public interface PizzaRepository extends JpaRepository<PizzaEntity, Long> { Optional<PizzaEntity> findFirstByAvailableTrue(); }
Esto permite obtener la primera pizza disponible. Recuerda ajustar la lógica en el servicio que llame a este método modificado.
¿Cómo integrar Optional en las consultas?
Optional es un potente aliado para manejar respuestas nulas o excepcionales en Java. Puede emplearse cuando llamamos a un Query Method que podría retornar un valor nulo. Si no se encuentra ningún resultado, podemos lanzar una excepción o devolver un valor por defecto.
Ejemplo de manejo de Optional:
Optional<PizzaEntity> optionalPizza = pizzaRepository.findFirstByAvailableTrue(); PizzaEntity pizza = optionalPizza.orElseThrow(() -> new RuntimeException("La pizza no existe"));
O, alternativamente:
PizzaEntity pizza = optionalPizza.orElseGet(() -> { // Lógica alternativa si la pizza no existe return new DefaultPizza(); });
¿Cómo encontrar las pizzas más baratas?
Podemos crear métodos para encontrar, por ejemplo, las tres pizzas más baratas. Utilizamos findTop3By para restringir la cantidad de registros. Asimismo, OrderBy permite ordenar estos registros según una propiedad, como el precio.
Ejemplo de búsqueda de pizzas económicas:
List<PizzaEntity> findTop3ByAvailableTrueAndPriceLessThanEqualOrderByPriceAsc(Double price);
Este método recupera las tres pizzas más baratas disponibles que cuestan menos de un valor dado, ordenándolas de manera ascendente.
¿Cómo invocar estos métodos desde el servicio?
Una vez definidos en el repositorio, invocamos estos métodos desde un servicio. Creamos un método que pase el precio como parámetro a nuestro Query Method.
public List<PizzaEntity> getCheapestPizzas(Double price) { return pizzaRepository.findTop3ByAvailableTrueAndPriceLessThanEqualOrderByPriceAsc(price); }
¿Cómo verificar consultas en el controlador?
Finalmente, modificamos el controlador para permitir que los clientes consulten las pizzas más baratas al proporcionar un cierto precio:
@GetMapping("/pizzas/cheapest/{price}") public List<PizzaEntity> getCheapestPizzas(@PathVariable Double price) { return pizzaService.getCheapestPizzas(price); }
Esta consulta se ejecuta y devuelve las tres pizzas más económicas cumpliendo las condiciones mencionadas. Además, es importante revisar la consulta SQL que se genera y asegurarse de que los resultados se limiten adecuadamente.
Estos son algunos ejemplos de cómo se pueden utilizar los Query Methods para lograr búsquedas eficientes y personalizadas. Estimula explorar más sobre esta funcionalidad. Para profundizar, consulta los recursos adicionales que ofrecen documentación detallada. Continuar aprendiendo y explorando te permitirá sacar el máximo provecho de las poderosas herramientas de Spring.