Pagination helps show data in small parts instead of all at once. Sorting arranges data in order. Pageable makes both easy in Spring Boot.
Pagination and sorting with Pageable in 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.
Pageable pageable = PageRequest.of(0, 5);
Pageable pageable = PageRequest.of(1, 10, Sort.by("name").ascending());
Pageable pageable = PageRequest.of(0, 20, Sort.by("price").descending());
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.
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(); } }
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.
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.