📄
Pagination, Filtering & Sorting

Pageable Deep Dive

Spring Data Pagination
💡 Pageable, EK BOOK ke, "PAGE NUMBER" aur "LINES PER PAGE" jaisa hai — POORI BOOK (SAARA DATA), EK SAATH, PADHNE ke BAJAYE, EK WAQT mein, EK PAGE (CHUNK), MANGWATE ho, LARGE DATASETS ko, EFFICIENTLY, HANDLE karne ke liye.

Spring Data's Pageable INTERFACE, PAGINATION ko, TRIVIAL bana deta hai — CONTROLLER, page (0-INDEXED) aur size PARAMETERS, AUTOMATICALLY, ACCEPT kar sakta hai, aur, Repository, findAll(Pageable pageable) SE, DIRECTLY, PAGINATED RESULTS, RETURN karti hai.

Page<T>, RETURN TYPE, SIRF DATA hi NAHI, BALKI, METADATA bhi DETA hai — totalElements, totalPages, hasNext(), hasPrevious() — CLIENT, IN VALUES SE, UI mein, "NEXT PAGE" BUTTON DISABLE/ENABLE kar sakta hai, BINA, EXTRA API CALL kiye.

@GetMapping
public Page<ProductDto> getProducts(
        @PageableDefault(size = 20, sort = "name") Pageable pageable) {
    return productRepository.findAll(pageable).map(this::toDto);
}
// GET /api/products?page=0&size=20&sort=name,asc

// Response:
// {
//   "content": [ ...20 products... ],
//   "totalElements": 145,
//   "totalPages": 8,
//   "number": 0,           ← current page (0-indexed)
//   "size": 20,
//   "first": true,
//   "last": false
// }
📄
Pageable, EK BOOK ke, "PAGE NUMBER" aur "LINES PER PAGE" jaisa hai — POORI BOOK (SAARA DATA), EK SAATH, PADHNE ke BAJAYE, EK WAQT mein, EK PAGE (CHUNK), MANGWATE ho, LARGE DATASETS ko, EFFICIENTLY, HANDLE karne ke liye.
1 / 6
⚡ Quick Recap
  • Pageable interface = page/size/sort, AUTOMATICALLY, handle hote hain
  • Page<T> = data + metadata (totalElements, totalPages, hasNext)
  • @PageableDefault = sensible defaults, agar client, params provide na kare
On this page (2 subtopics)

AGAR, CLIENT, ?size=100000, JAISA, BADA, VALUE, BHEJE, SERVER, OVERWHELM ho sakta hai — @Max VALIDATION, YA, EK, CUSTOM, PageableHandlerMethodArgumentResolver SE, MAXIMUM, PAGE SIZE (jaise, 100), ENFORCE karna, IMPORTANT hai.

@Bean
public PageableHandlerMethodArgumentResolverCustomizer customizer() {
    return resolver -> resolver.setMaxPageSize(100);
}

Page<T>, TOTAL COUNT (totalElements) CALCULATE karne ke liye, EK, EXTRA, COUNT QUERY, RUN karta hai (PERFORMANCE COST). Slice<T>, YE, COUNT QUERY, SKIP karta hai — SIRF, hasNext() BATATA hai, TOTAL COUNT NAHI — "INFINITE SCROLL" jaise, UI PATTERNS ke liye, ZYAADA, EFFICIENT hai.

  • Page<T> = total count SAHIT (EXTRA query, LEKIN, total pages, PATA hai)
  • Slice<T> = count query, SKIP — FASTER, infinite scroll ke liye BEHTAR