¿Cómo implementar un ordenamiento dinámico en un repositorio en Spring?
Imagina que puedes controlar la manera en que los datos se presentan, no solo la cantidad de información como con la paginación, sino también el orden en que estos aparecen. Eso es precisamente lo que lograremos con el Paging and Sorting Repository en Spring. Este tutorial te guiará en la implementación de un sistema que facilita tanto la paginación como el ordenamiento dinámico de datos en tus aplicaciones.
¿Cómo crear un nuevo método de consulta con paginación y ordenamiento?
Para comenzar, es crucial entender que nuestro nuevo método de consulta no retornará una lista, sino que regresará una página de nuestra entidad. En este ejemplo, la entidad se llama PXAEntity
. Crearemos un método llamado FindByAvailableTrue
que, usando el Paging and Sorting Repository, nos permitirá consultar todas las entidades disponibles.
public Page<PXAEntity> findByAvailableTrue(Pageable pageable);
Este método recibe un objeto Pageable
, el cual es esencial para gestionar tanto la paginación como el ordenamiento de manera efectiva.
¿Cómo manejar los parámetros de paginación y ordenamiento?
Para realizar consultas paginadas y ordenadas, debemos considerar ciertos parámetros: la página que queremos consultar, cuántos elementos incluir en cada página, y la columna por la cual deseamos ordenar los resultados. Esto lo controlamos a través de un PageRequest
, que envía un tercer elemento, el Sort
, junto con el string sortBy
.
Modificaré el servicio para ajustar el tipo de retorno y enviar los parámetros necesarios al repositorio:
PageRequest pageRequest = PageRequest.of(page, size, Sort.by(Sort.Order.asc(sortBy)));
Page<PXAEntity> result = pxaPagingAndSortRepository.findByAvailableTrue(pageRequest);
En este caso, el resultado será una página que podemos pasar posteriormente al controlador.
¿Cómo se actualiza el controlador para recibir parámetros?
El siguiente paso es actualizar el controlador de nuestra aplicación para que pueda manejar nuevos parámetros de entrada. Utilizaremos RequestParam
para recibir el sortBy
y asignar un valor por defecto como "price":
@GetMapping("/available")
public Page<PXAEntity> getAvailable(@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "price") String sortBy) {
PageRequest pageRequest = PageRequest.of(page, size, Sort.by(Sort.Order.asc(sortBy)));
return pxaService.findByAvailableTrue(pageRequest);
}
Esto nos permitirá, por defecto, ordenar los resultados por el precio de las pizzas.
¿Cómo configurar el ordenamiento ascendente o descendente?
Agregar la capacidad de ordenar ascendentemente o descendentemente brinda flexibilidad adicional a nuestros métodos de consulta. Para ello, introducimos un nuevo parámetro llamado sortDirection
, el cual predeterminamos como ascendente:
@RequestParam(defaultValue = "ASC") String sortDirection
Con este cambio, podemos construir un objeto Sort
que reaccione a este parámetro:
Sort sort = Sort.by(Sort.Direction.fromString(sortDirection), sortBy);
PageRequest pageRequest = PageRequest.of(page, size, sort);
Implementar este ajuste en el controlador nos da la opción de manejar consultas que ordenen datos en ambas direcciones sin esfuerzo adicional.
¿Qué beneficios proporciona el uso de Page Unsorting Repository?
Integrar paginación y ordenamiento dinámico en tu aplicación mejora significativamente la experiencia del usuario final. No solo le permite acceder a grandes volúmenes de datos de manera más efectiva, sino que también le da control sobre la manera en que se presenta la información. Esto es un gran paso hacia el desarrollo de aplicaciones web potentes y adaptables. ¡Utiliza estas técnicas en tus proyectos y observa la diferencia!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?