📘 Premium Read: Access my best content on
Medium member-only articles
— deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.
🎓 Top 15 Udemy Courses (80-90% Discount):
My Udemy Courses - Ramesh Fadatare
— All my Udemy courses are real-time and project oriented courses.
As you know, pagination allows the users to see a small portion of data at a time (a page), and sorting allows the users to view the data in a more organized way. Both paging and sorting help the users consume information more easily and conveniently.
Let's first discuss pagination implementation using Spring Data JPA then we will move to sorting implementation.
1. Pagination Implementation
Understand Spring Data JPA’s Pagination APIs
To use paging and sorting APIs provided by Spring Data JPA, your repository interface must extend the PagingAndSortingRepository interface.
PagingAndSortingRepository is an extension of the CrudRepository to provide additional methods to retrieve entities using the pagination and sorting abstraction. It provides two methods :
Page findAll(Pageable pageable) – returns a Page of entities meeting the paging restriction provided in the Pageable object.
Iterable findAll(Sort sort) – returns all entities sorted by the given options. No paging is applied here.
Here is the internal source code of PagingAndSortingRepository interface:
@NoRepositoryBeanpublicinterfacePagingAndSortingRepository < T, ID > extendsCrudRepository < T, ID > {
/** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options*/Iterable < T > findAll(Sortsort);
/** * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. * * @param pageable * @return a page of entities*/Page < T > findAll(Pageablepageable);
}
JpaRepository interface extends the PagingAndSortingRepository interface so if your repository interface is of type JpaRepository, you don’t have to make a change to it.
Here is the internal source code of the JpaRepository interface which extends PagingAndSortingRepository interface:
@NoRepositoryBeanpublicinterfaceJpaRepository < T, ID > extendsPagingAndSortingRepository < T, ID > , QueryByExampleExecutor < T > {
List < T > findAll();
List < T > findAll(Sortsort);
List < T > findAllById(Iterable < ID > ids);
<S extends T >List < S > saveAll(Iterable < S > entities);
voidflush();
<S extends T >SsaveAndFlush(Sentity);
voiddeleteInBatch(Iterable < T > entities);
voiddeleteAllInBatch();
TgetOne(IDid);
@Override<S extends T > List < S > findAll(Example < S > example);
@Override<S extends T > List < S > findAll(Example < S > example, Sortsort);
}
Let's understand the usage of the PagingAndSortingRepository interface and it''s methods with an example.
Now, we use the following code to get the first page from the database, with 5 items per page:
int pageNumber =1;
int pageSize =5;
Pageable pageable =PageRequest.of(pageNumber, pageSize);
Page<Employee> page = employeeRepository.findAll(pageable);
Then you can get the actual content as follows:
List<Employee> listEmployees = page.getContent();
With a Page object you can know the total rows in the database and the total pages according to the given page size:
long totalItems = page.getTotalElements();
int totalPages = page.getTotalPages();
Create EmployeeRepository
Let's create an EmployeeRepository interface which extends JpaRepository which intern extends the PagingAndSortingRepository interface so we can leverage pagination API:
In the service layer, let's create an EmployeeServiceImpl class which implements the EmployeeService interface and provides implementation for pagination:
The Spring Data JPA provides PagingAndSortingRepository interface which supports sorting and pagination with the following APIs:
@NoRepositoryBeanpublicinterfacePagingAndSortingRepository < T, ID > extendsCrudRepository < T, ID > {
/** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options*/Iterable < T > findAll(Sortsort);
/** * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. * * @param pageable * @return a page of entities*/Page < T > findAll(Pageablepageable);
}
First, create a Sort object like this:
Sort sort =Sort.by(“fieldName”).ascending();
This will sort the result by fieldName in ascending order. fieldName must match a field name declared in the entity class.
We can also sort by more than one field, for example:
Finally, we pass the pageable object to the findAll() method:
this.employeeRepository.findAll(pageable);
Create EmployeeRepository
Let's create an EmployeeRepository interface which extends JpaRepository which intern extends the PagingAndSortingRepository interface so we can leverage sorting API:
Check out the below diagram which shows the main interfaces of Spring Data JPA for your reference:
Video Tutorial
Watch this video on my YouTube channel to understand more about pagination and sorting implementations in Spring boot application using Spring Data JPA:
Comments
Post a Comment
Leave Comment