Contenido del curso
Primeros pasos
Spring Data Repositories
- 7

Qué son los Spring Data Repositories
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

Fechas y listas en query methods de JPA
Viendo ahora - 14

findTop y Optional en Spring Data JPA
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
Características avanzadas
Próximos pasos
Fechas y listas en query methods de JPA
Resumen
Cuando trabajas con Spring Data JPA, los query methods te permiten construir consultas complejas sin escribir una sola línea de SQL. Aquí aprenderás a filtrar registros por fechas, comparar valores dentro de listas y contar resultados aprovechando la convención de nombres de los repositorios.
¿Cómo filtrar registros por fecha con query methods?
Las fechas son uno de los filtros más comunes en cualquier aplicación. Spring Data JPA resuelve esto con palabras clave como After y Before que se acoplan al nombre del atributo en tu entidad.
¿Cómo recuperar las órdenes del día actual?
El ejemplo parte de una pizzería que necesita saber qué órdenes han entrado hoy. En el OrderRepository se define el método siguiendo la convención del nombre del campo date de OrderEntity.
java List<OrderEntity> findAllByDateAfter(LocalDateTime date);
La magia está en Date.after. Al pasarle un LocalDateTime, el método traduce automáticamente a un WHERE date > ? en SQL [02:10]. Si necesitas lo contrario, basta con cambiar a Before.
En la capa de servicio, se construye la fecha de referencia tomando el día actual a las 00:00 horas:
java public List<OrderEntity> getTodayOrders() { LocalDateTime today = LocalDate.now().atTime(0, 0); return this.orderRepository.findAllByDateAfter(today); }
El método LocalDate.now().atTime(0,0) te da el corte exacto a medianoche, asegurando que cualquier orden registrada después de esa hora aparezca en el resultado.
¿Qué hace el keyword After en un query method? Genera una cláusula
WHERE campo > valoren SQL. Lo usas cuando quieres traer registros posteriores a una fecha o valor numérico.
¿Cómo consultar valores dentro de una lista usando IN?
El segundo escenario que resuelve la clase es traer las órdenes que salen del local: domicilios y pedidos para llevar. Aquí entra el keyword IN, que evalúa si un atributo coincide con cualquier valor de una lista.
¿Cómo se escribe un query method con IN?
En OrderRepository defines el método recibiendo una lista de strings:
java List<OrderEntity> findAllByMethodIn(List<String> methods);
El atributo method en OrderEntity guarda una sola letra que representa el tipo de pedido. Para que el código sea más legible, se declaran constantes en el servicio:
DELIVERY = "D"para pedidos a domicilio.CARRYOUT = "C"para pedidos para llevar.ONSITE = "S"para consumo en el local.
Luego se arma la lista con Arrays.asList(DELIVERY, CARRYOUT) y se pasa al repositorio:
java public List<OrderEntity> getOutsideOrders() { List<String> methods = Arrays.asList(DELIVERY, CARRYOUT); return this.orderRepository.findAllByMethodIn(methods); }
En consola verás que Hibernate traduce esto a un WHERE method IN (?, ?), mandando los parámetros agrupados en lugar de hacer comparaciones individuales [05:30].
¿Cuándo conviene usar IN en lugar de múltiples OR? Cuando tienes 2 o más valores posibles para un mismo campo.
INes más limpio, escalable y deja el código preparado para agregar más opciones sin romper la query.
¿Cómo contar registros con query methods en Spring Data?
Los query methods no solo recuperan listas. También puedes ejecutar conteos directamente desde la convención del nombre, sin tocar SQL.
¿Qué diferencia hay entre findAllBy y countBy?
Mientras findAllBy devuelve una colección de entidades, countBy devuelve un entero con la cantidad de registros que cumplen la condición. La sintaxis acepta tanto countBy como countAllBy.
En el ejemplo, queremos saber cuántas pizzas veganas ofrece la pizzería:
java int countByVeganTrue();
Esto se traduce en un SELECT COUNT(*) FROM pizzas WHERE vegan = true. Al ejecutarlo dentro de PizzaService, el resultado fue 2 pizzas veganas disponibles en toda la carta [08:45].
Lo interesante es que el método combina dos elementos: Vegan como nombre del atributo y True como valor literal a comparar. No necesitas pasar parámetros porque el valor ya está implícito en el nombre.
Conceptos y habilidades clave que se aplican
Durante la clase pones en práctica varias técnicas que vale la pena tener identificadas:
- Convención de nombres en Spring Data JPA: la base que permite generar SQL desde el nombre del método [01:20].
- LocalDate y LocalDateTime: clases de Java 8+ para manejar fechas sin acoplarte a la zona horaria del sistema [02:30].
- Keyword After y Before: comparadores temporales o numéricos dentro de query methods.
- Keyword IN: filtro por coincidencia con cualquier elemento de una lista [04:15].
- Arrays.asList: utilidad para crear listas inmutables de forma rápida.
- Constantes con private static final: práctica que mejora la legibilidad y evita strings mágicos en el código [05:00].
- countBy y countAllBy: variantes para contar registros sin recuperar las entidades completas [07:50].
¿Qué query method te gustaría implementar en tu proyecto actual? Comenta cómo aplicarías estas técnicas en tu propio dominio.