Paginación y ordenación en Spring Data
En este artículo vamos a ver como podemos realizar la paginación y ordenación en Spring Data. Tanto la paginación como la ordenación se realiza de una manera fácil y sencilla haciendo uso de Spring Data.
Dependencia Maven para paginación y ordenación en Spring Data
El primer paso que necesitamos para poder hacer uso de Spring Data es añadir la dependencia. Si estamos haciendo uso del parent de Spring Boot lo único que tendremos que añadir es su starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Una vez hemos añadido esta dependencia podremos hacer uso de la paginación ordenación en Spring Data, la mejor manera es verlo con un ejemplo.
Ejemplo de paginación y ordenación con Spring Data
Vamos a ver mediante un ejemplo como realizar la ordenación y paginación de una tabla guardada en Base de Datos. Nuestra tabla será de usuarios y vamos a realizar ordenaciones por el nombre y paginaciones.
Creación de la entidad
Creamos una entidad en la que vamos a hacer uso de Lombok para simplificar el boilerplate.
@Entity @Getter @Setter @NoArgsConstructor public class User { @Id private long id; private String name; }
Creación de repositorio
Para crear el repositorio para poder realizar paginaciones y ordenaciones podemos optar por:
- extender de PagingAndSortingRepository.
- extender de JpaRepository.
PagingAndSortingRepository nos va a ofrecer los métodos findAll para la paginación y la ordenación.
Por otro lado si extendemos de JpaRepository tendremos una extensión específica de Repositorio que contiene CrudRepository y PagingAndSortingRepository
public interface JpaRepository<T,ID> extends PagingAndSortingRepository<T,ID>, QueryByExampleExecutor<T>
Para nuestro ejemplo vamos a extender de JpaRepository de la siguiente manera:
public interface UserRepository extends JpaRepository<User, Long> { List<User> findAllByName(String name, Pageable pageable); }
Una vez hemos creado nuestro método para paginar y ordenar es momento de utilizarlo.
Paginación con Spring Data
Para hacer uso de la paginación en Spring Data, es necesario crear un objeto Pageable que será el que se pase a la función del repositorio que hemos creado.
Para poder crear un objeto Pageable vamos a hacer uso de PageRequest que es una implementación de Pageable. Y a continuación el método que tenemos en nuestro repositorio.
public List<User> findUsesByName(String name, int initPage) { Pageable page = PageRequest.of(initPage, 10); //size = 10 return userRepository.findAllByName(name, page); }
En el fragmento de código anterior hemos creado un objeto Pageable a través de PageRequest al que le pasamos dos valores, la página inicial y la página final y ese objeto Pageable se lo pasamos al repositorio.
Uno de los métodos por defecto del repositorio es findAll(), este método nos devuelve un Page con el que tenemos más información sobre la paginación:
Page<User> allUsers = userRepository.findAll(page);
La interfaz de Page sería la siguiente:
public interface Page<T> extends Slice<T>
El objeto Page que extiende de Slice nos va a proporcionar a parte de una lista, nos dará el total de elementos y el número total de páginas que tenemos para esa búsqueda.
Ordenación con Spring Data
Para realizar la ordenación podemos utilizar dos aproximaciones:
- Haciendo uso de Sort.by(«campo»)
- Pasando Sort.by en el PageRequest.
Por ejemplo haciendo uso de Sort.by, sería de la siguiente manera:
Page<User> allUsersSortByName = userRepository.findAll(Sort.by("name"));
O podemos ordenar a la vez que añadimos paginación con PageRequest:
Pageable sortedByName = PageRequest.of(init, 10, Sort.by("name")); Pageable sortByNameInDescendentWay = PageRequest.of(0, 10, Sort.by("name").descending()); Pageable sortByNameAndAge = PageRequest.of(init, end, Sort.by("age").descending().and(Sort.by("name")));
Además algo que podemos hacer es especificar si queremos ordenación ascendente (por defecto) o descendente. Y también podemos realizar ordenaciones compuestas, por ejemplo podemos ordenar de manera descendente por nombre y además por edad.
Conclusión
Spring Data nos va a facilitar la paginación para obtener listas filtradas por página o para establecer una ordenación. Realizar paginación es muy frecuente cuando queremos recuperar listados y evitar recuperar todos los registros de la Base de Datos.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!