0
0
Spring Bootframework~5 mins

Pagination and sorting with Pageable in Spring Boot

Choose your learning style9 modes available
Introduction

Pagination helps show data in small parts instead of all at once. Sorting arranges data in order. Pageable makes both easy in Spring Boot.

When you have many database records and want to show only a few per page.
When users want to see data sorted by name, date, or price.
When building a web app that lists items with next and previous buttons.
When you want to reduce loading time by fetching limited data.
When you want to combine sorting and paging in one request.
Syntax
Spring Boot
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("fieldName").ascending());
Page<Entity> page = repository.findAll(pageable);

PageRequest.of() creates a Pageable object with page number, size, and sort.

Page numbers start at 0, so page 0 is the first page.

Examples
Get first page with 5 items, no sorting.
Spring Boot
Pageable pageable = PageRequest.of(0, 5);
Get second page with 10 items, sorted by name A to Z.
Spring Boot
Pageable pageable = PageRequest.of(1, 10, Sort.by("name").ascending());
Get first page with 20 items, sorted by price high to low.
Spring Boot
Pageable pageable = PageRequest.of(0, 20, Sort.by("price").descending());
Sample Program

This Spring Boot app shows how to get products with pagination and sorting.

The controller method accepts page number, size, sort field, and order from URL parameters.

It creates a Pageable object and fetches a page of products from the database.

The result is a list of products for that page and order.

Spring Boot
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

import java.util.List;

@SpringBootApplication
public class PaginationSortingApp {
    public static void main(String[] args) {
        SpringApplication.run(PaginationSortingApp.class, args);
    }
}

@Entity
class Product {
    @Id
    private Long id;
    private String name;
    private double price;

    public Product() {}

    public Product(Long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public Long getId() { return id; }
    public String getName() { return name; }
    public double getPrice() { return price; }

    @Override
    public String toString() {
        return String.format("Product{id=%d, name='%s', price=%.2f}", id, name, price);
    }
}

interface ProductRepository extends JpaRepository<Product, Long> {}

@RestController
class ProductController {
    private final ProductRepository repository;

    ProductController(ProductRepository repository) {
        this.repository = repository;
    }

    @GetMapping("/products")
    public List<Product> getProducts(
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "5") int size,
            @RequestParam(defaultValue = "name") String sortBy,
            @RequestParam(defaultValue = "asc") String order) {

        Sort sort = order.equalsIgnoreCase("desc") ? Sort.by(sortBy).descending() : Sort.by(sortBy).ascending();
        Pageable pageable = PageRequest.of(page, size, sort);
        Page<Product> productPage = repository.findAll(pageable);
        return productPage.getContent();
    }
}
OutputSuccess
Important Notes

Page numbers start at 0, so the first page is page 0.

Sorting fields must match entity property names exactly.

Use Page.getTotalPages() to know how many pages exist.

Summary

Pageable helps get data in small pages with sorting.

Use PageRequest.of(page, size, sort) to create Pageable.

Combine pagination and sorting in one easy step with Spring Data.