Si les sale un error como a mi, deben cambiar el valor de la Columna Price a double, y aqui esta el metodo:
< List<PizzaEntity> findTop3ByAvailableTrueAndPriceLessThanEqualOrderByPriceAsc(double price);
>
Introducción
Curso de Spring Data JPA con MySQL y RESTful API
Creación de Proyectos con Spring Initializer y Gradle
Primeros pasos
Conexión de Proyecto Java a Base de Datos MySQL en IntelliJ IDEA
Creación de Entidades con Hibernate en Java
Relaciones entre Entidades en JPA: OneToOne, ManyToOne, OneToMany
Consultas SQL con JDBC Template en Spring Boot
Spring Data Repositories
Uso de Spring Data Repositories para Gestión de Datos
Guardar y Actualizar Registros con Spring Data Repositories
Eliminar elementos con Spring Data JPA: método deleteById
Gestión de Relaciones en JPA: Lazy vs Eager Fetching
Query Methods en Spring para Consultas Personalizadas
Filtrado de Pizzas por Ingredientes usando Query Methods
Consultas Avanzadas con Query Methods en Java Spring
Uso de Query Methods para Filtrar y Ordenar Datos en Spring
Paginación y Ordenación con Spring Data Repositories
Ordenamiento Dinámico con Paging and Sorting Repository
Personalización de queries
Consultas de Base de Datos con JPQL en Spring Boot
Consultas SQL nativas y ordenación con Hibernate en Spring Data
Uso de Proyecciones en Queries Personalizados con Java y SQL
Actualización de Precios de Pizza con Spring Data JPA
Propiedades ACID y Spring Data: Uso de @Transactional
Características avanzadas
Auditoría de Entidades con Spring Data JPA
Auditoría de Entidades con Listeners Personalizados en Spring
Ejecución de Store Procedures en Spring Data
Próximos pasos
Fundamentos de Spring Data JPA: Conexión y Repositorios
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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.
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.
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();
});
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.
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);
}
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.
Aportes 4
Preguntas 0
Si les sale un error como a mi, deben cambiar el valor de la Columna Price a double, y aqui esta el metodo:
< List<PizzaEntity> findTop3ByAvailableTrueAndPriceLessThanEqualOrderByPriceAsc(double price);
>
✅
Super! 👏🚀
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?