DEV Community

Cover image for How to implement Pagination in Spring-boot project?
Sanju Shaw
Sanju Shaw

Posted on

How to implement Pagination in Spring-boot project?

Before beginning, let’s understand what pagination actually is.

Pagination simply means breaking a huge dataset into smaller chunks or pages. This is exactly what you see on e-commerce websites when products load page by page, or when you scroll through Google search results — you never get all the data at once.

It's useful because:

  • You save bandwidth.
  • Backend responds faster
  • UI becomes smoother.
  • Database queries remain optimized

How to set-up pagination

Suppose we have an API like:

/api/books?query=adventure
Enter fullscreen mode Exit fullscreen mode

Now we can easily configure the backend to limit the number of items returned.
Spring Data JPA already gives built-in support for pagination using Pageable.

We can also let the client decide how many results they want:

/api/books?query=adventure&page=0&size=20
Enter fullscreen mode Exit fullscreen mode
  • page -> which page number(0-based index)
  • size -> how many items per page

Let's implement this properly.


Coding time 🧑‍💻

We are using Spring Boot + MySQL + Spring Data JPA.

1. Controller Layer

@RestController
@RequestMapping("/api/books")
public class BookController {

    @Autowired
    private BookService bookService;

    @GetMapping
    public Page<Book> getBooks(
            @RequestParam(defaultValue = "adventure") String query,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size) {

        return bookService.getBooks(query, page, size);
    }
}
Enter fullscreen mode Exit fullscreen mode
  • we use Spring's Page class
  • page & size have default values.
  • Output automatically includes : totalElements, totalPages, current page number, size, and you actual data list.

2. Service Layer(Business Logic):

@Service
public class BookService {

    @Autowired
    private BookRepository bookRepository;

    public Page<Book> getBooks(String query, int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        return bookRepository.findByTitleContainingIgnoreCase(query, pageable);
    }
}
Enter fullscreen mode Exit fullscreen mode

Here:

  • `PageRequest.of(page, size) creates the pagination configuration.
  • Repository method automatically handles pagination.

3. Repository Layer:

This is the beauty of Spring Data JPA - no SQL written manually.
It handles :

  • LIMIT
  • OFFSET
  • Filtering
  • Sorting All under the hood.

want to sort the results??

bash
/api/books?page=0&size=10&sort=price,desc

Change your controller parameter:


Final Result

If you call:

bash
GET /api/books?query=adventure&page=0&size=5

Response be like:

This is how pagination works smoothly in Spring Boot.

Follow me for more Java oriented and system design content. Thanks for reading!

Top comments (0)