No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Ordenando la información paginada

16/25
Recursos

¿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!

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Siempre el uso de los QueryMethods son de mayor utilidad a la hora de personalizar nuestras consultas hacia la base de datos, y la utilidad de poder retornar una sublista de una lista de objetos como lo es **Page ** nos da la posibilidad de paginar las respuestas y adicional agregar una dirección de ordenamiento ascendente o descendente, que buena clase Profesor Alejandro.

voy a resumir este curso en tres palabras MA GIS TRAL

Vengo del futuro y esto les servirá:
Recuerden que el valor por defecto de la dirección cuando se usa Sort es ASC.

Otras implementacioens de la clase Sort


      public Page<EmployeeEntity> getAllDepInAndHireDateUp(LocalDate date, List<Long> dep, int page, int size){
		return this.emp3Rep.buscarFechaSupInDepartmentJpql(date, dep, PageRequest.of(page, size, Sort.by(Order.desc("id"))));
	}
	public Page<EmployeeEntity> getAllSalarylessThanAndJoIDInSort(Double salary, List<String> jobId, int page, int size){
		return this.emp3Rep.c(salary, jobId,PageRequest.of(page, size, Sort.by(Direction.ASC, "firstName" , "lastName")));
	}  
	public Page<EmployeeEntity> getAllManagerId(Long managerId, int page, int size){
		return this.emp3Rep.buscarEmpleadoJefeIdEqualAndOrder(managerId, PageRequest.of(page, size, Sort.by("firstName").ascending().and
				                                                                                   (Sort.by("lastName").descending())));
	}  
Genial!!! Me parece increíble poder adaptar la consulta desde el mismo endpoint, de esta forma, ya no debemos especificar el ordenamiento en los querymethods, lo que a mi entender nos ahorra código y hace que el requerimiento sea mas interactivo y funcional.
En la clase se utiliza el `Sort` para ordenar la información paginada. El `Sort` se importa como `import org.springframework.data.domain.Sort;`, lo que permite definir el orden de los resultados en base a los campos especificados. Además, puedes personalizar el orden (ascendente o descendente) al crear un objeto `Sort` usando `Sort.by()` y `Sort.Direction`. Esto te permite tener un control dinámico sobre cómo se ordenan los elementos en tu consulta.

Brutal!! fascinado con la info de este curso. Me encantaría un curso a más profundidad de estos temas
Excelente curso