DEV Community

Mustafa  Çam
Mustafa Çam

Posted on

PageRequest

PageRequest, Spring Data JPA'nın veri kümesini sayfalara bölmek ve sıralamak için kullandığı bir sınıftır. Sayfalama, büyük veri kümeleriyle çalışırken performansı artırmak ve kullanıcılara daha iyi bir deneyim sunmak için önemli bir tekniktir. Sayfalama, tüm veri kümesini tek seferde yüklemek yerine, verileri belirli büyüklükteki parçalara (sayfalara) bölerek yükler.

PageRequest ve Sayfalamanın Faydaları

  1. Performans İyileştirmesi:

    • Büyük veri kümeleriyle çalışırken, tüm verileri tek seferde yüklemek veritabanı ve uygulama performansını olumsuz etkileyebilir. Sayfalama, sadece ihtiyaç duyulan verileri yükleyerek bu sorunu azaltır.
  2. Bellek Kullanımı:

    • Tüm veri kümesini bellek üzerinde tutmak yerine, sadece istenen sayfayı bellek üzerinde tutarak bellek kullanımını optimize eder.
  3. Kullanıcı Deneyimi:

    • Kullanıcılara daha hızlı yanıt süreleri sunar. Kullanıcılar genellikle tüm veri kümesini görmek istemezler; bunun yerine verileri sayfalar halinde görmek daha kullanışlıdır.
  4. Sıralama:

    • Verileri belirli bir alana göre sıralama imkanı sunar. Örneğin, ürünleri fiyatlarına göre artan veya azalan sırada gösterebilirsiniz.

PageRequest Kullanımı

Kod örneğimizde PageRequest'in nasıl kullanıldığını inceleyelim:

public Set<ProductResponse> getAll(ProductSearchRequest request) {

    Specification<Product> productSpecification = ProductSpecification.initProductSpecification(request);

    // Sayfalama ve sıralama için PageRequest oluşturulması
    PageRequest pageRequest = PageRequest.of(request.getPage(), request.getSize(), Sort.by(Sort.Direction.ASC, "amount"));

    // Sayfalama ve spesifikasyon ile ürünlerin getirilmesi
    Page<Product> products = productRepository.findAll(productSpecification, pageRequest);

    log.info("db'den getirildi. product size:{}", products.getSize());

    return ProductConverter.toResponse(products.stream().toList());
}
Enter fullscreen mode Exit fullscreen mode

Açıklama

  1. PageRequest Oluşturulması:
   PageRequest pageRequest = PageRequest.of(request.getPage(), request.getSize(), Sort.by(Sort.Direction.ASC, "amount"));
Enter fullscreen mode Exit fullscreen mode
  • PageRequest.of(int page, int size, Sort sort) metodu, belirli bir sayfa numarası (page), sayfa başına kayıt sayısı (size) ve sıralama kriteri (sort) ile bir PageRequest nesnesi oluşturur.
  • request.getPage(): Hangi sayfanın yükleneceğini belirtir (0 tabanlı indeks).
  • request.getSize(): Sayfa başına kaç kaydın yükleneceğini belirtir.
  • Sort.by(Sort.Direction.ASC, "amount"): Kayıtların amount alanına göre artan sırada sıralanacağını belirtir. Bu, ürünleri fiyatlarına göre artan sırada sıralar.
  1. Veritabanı Sorgusu:
   Page<Product> products = productRepository.findAll(productSpecification, pageRequest);
Enter fullscreen mode Exit fullscreen mode
  • productRepository.findAll(Specification spec, Pageable pageable) metodu, belirli bir spesifikasyona ve sayfalama kriterlerine göre veritabanından kayıtları getirir.
  • Bu örnekte, productSpecification ve pageRequest kullanılarak, belirli bir sayfaya ait ürünler amount alanına göre sıralanmış olarak getirilir.
  1. Sonuçların Dönüşümü:
   return ProductConverter.toResponse(products.stream().toList());
Enter fullscreen mode Exit fullscreen mode
  • Veritabanından getirilen Product nesneleri ProductResponse nesnelerine dönüştürülür ve set olarak döner.

Özet

PageRequest, Spring Data JPA'nın veri kümesini sayfalara bölmek ve sıralamak için kullandığı bir sınıftır. Bu, büyük veri kümeleriyle çalışırken performansı artırmak, bellek kullanımını optimize etmek ve kullanıcılara daha iyi bir deneyim sunmak için önemli bir tekniktir. PageRequest kullanarak, sadece belirli bir sayfadaki kayıtları yükleyebilir ve verileri belirli bir alana göre sıralayabilirsiniz.

Top comments (0)