Consultas Avanzadas con Query Methods en Java Spring
Clase 13 de 25 • Curso de Java Spring Data JPA: Bases de Datos
Resumen
¿Qué son y cómo utilizar los Query Methods para listas y fechas?
Los Query Methods son una herramienta poderosa que nos facilitan la recuperación de información de una base de datos mediante el uso de convenciones de nomenclatura específica. A través de ellos, podemos realizar consultas basadas en condiciones como listas o fechas. En este artículo, exploraremos cómo crear un método de consulta que permita recuperar órdenes de una pizzería según una fecha específica.
¿Cómo se crean consultas basadas en fechas?
Para recuperar las órdenes que nuestra pizzería ha tenido hoy, inicialmente, es esencial crear un método en nuestro OrderRepository
. Este método utilizará la convención findAllByDateAfter
para obtener órdenes con fecha posterior a una específica:
public interface OrderRepository extends JpaRepository<OrderEntity, Long> {
List<OrderEntity> findAllByDateAfter(LocalDateTime date);
}
Luego, se desarrollará un servicio que utiliza este método para devolver las órdenes del día. Se crea un objeto LocalDateTime
para obtener la fecha actual:
@Service
public class OrderService {
public List<OrderEntity> getTodayOrders() {
LocalDateTime today = LocalDate.now().atStartOfDay();
return orderRepository.findAllByDateAfter(today);
}
}
Posteriormente, se crea un endpoint
en el controlador que utiliza este nuevo servicio para responder a las peticiones:
@RestController
@RequestMapping("/orders")
public class OrderController {
@GetMapping("/today")
public ResponseEntity<List<OrderEntity>> getTodayOrders() {
return ResponseEntity.ok(orderService.getTodayOrders());
}
}
¿Cómo se gestionan las consultas en listas?
Además de fechas, los Query Methods también permiten gestionar listas. Supongamos que queremos listar todas las órdenes externas (domicilio o para llevar). Para esto, creamos un QueryMethod
que use el keyword IN
.
En el OrderRepository
, usamos el método findAllByMethodIn
, recibiendo una lista de métodos de entrega:
public interface OrderRepository extends JpaRepository<OrderEntity, Long> {
List<OrderEntity> findAllByMethodIn(List<String> methods);
}
En esta consulta, se trabaja con una lista de strings que representan los métodos de entrega deseados:
@Service
public class OrderService {
public List<OrderEntity> getOutsideOrders() {
List<String> methods = Arrays.asList("D", "C");
return orderRepository.findAllByMethodIn(methods);
}
}
Y finalmente, se implementa un endpoint
para procesar estas consultas:
@RestController
@RequestMapping("/orders")
public class OrderController {
@GetMapping("/outside")
public ResponseEntity<List<OrderEntity>> getOutsideOrders() {
return ResponseEntity.ok(orderService.getOutsideOrders());
}
}
¿Cómo contar elementos con Query Methods?
Además de obtener datos específicos, los Query Methods permiten realizar operaciones como contar elementos. Aquí se muestra un ejemplo de cómo contar cuántas pizzas veganas ofrece una pizzería.
En el PizzaRepository
, se puede usar el método countBy
para determinar cuántas pizzas tienen una propiedad específica, en este caso, si son veganas:
public interface PizzaRepository extends JpaRepository<PizzaEntity, Long> {
int countByVeganTrue();
}
Podemos aplicar esta lógica en un servicio para imprimir el resultado en la consola:
@Service
public class PizzaService {
public void countVeganPizzas() {
int veganPizzas = pizzaRepository.countByVeganTrue();
System.out.println("Número de pizzas veganas: " + veganPizzas);
}
}
Al ejecutar esta funcionalidad, el sistema consulta cuántas entradas en la tabla cumplen la condición indicada y nos devuelve el total.
¿Qué consideraciones adicionales hay en el uso de query methods?
- Facilidad de lectura: Los Query Methods son intuitivos y permiten entender la lógica de la consulta directamente desde su nombre.
- Evitar consultas complejas: Aunque son poderosos, se recomienda no abusar de su uso para consultas extremadamente complejas, ya que podrían afectar el rendimiento.
- Gestión de métodos IN: Para consultas con el keyword IN, asegúrate de manejar listas de manera adecuada, evitando duplicados y verificando los valores disponibles en la base de datos.
¡Con estos ejemplos de uso de Query Methods para manejar fechas, listas y contar elementos, estarás equipado con las habilidades necesarias para manejar diferentes escenarios en tus aplicaciones! Continúa explorando y aplicando estas técnicas para convertirte en un experto en manejo de bases de datos.