Extragerea a mii de înregistrări din baza de date într-o singură cerere poate bloca memoria JVM și rețeaua. Spring Data oferă suport nativ pentru paginare prin interfața Pageable și clasa returnată Page<T>.
Hibernate generează automat clauzele SQL corespunzătoare de LIMIT și OFFSET, precum și interogarea paralelă de COUNT pentru a calcula numărul total de pagini și elemente disponibile, date ideale pentru trimis către frontend.
Exemplu: Paginare completă în Repository și expunere în Controller
package ro.dexblog.demo.controller;
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.web.bind.annotation.*;
import ro.dexblog.demo.model.Product;
import ro.dexblog.demo.repository.ProductRepository;
@RestController
@RequestMapping("/api/v1/products")
public class ProductController {
private final ProductRepository productRepository;
public ProductController(ProductRepository productRepository) {
this.productRepository = productRepository;
}
@GetMapping
public Page getProducts(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "price") String sortBy
) {
Pageable pageable = PageRequest.of(page, size, Sort.by(sortBy).descending());
return productRepository.findAll(pageable);
}
}
Întrebări & Exemple de Cod:
Paginare și Sortare cu Pageable și Page<T>Ai o nelămurire despre utilizarea comenzii
Paginare și Sortare cu Pageable și Page<T>sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.