Uso de Query Methods para Filtrar y Ordenar Datos en Spring
Clase 14 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
08:34 min - 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
Viendo ahora - 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 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.