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ı
-
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.
-
Bellek Kullanımı:
- Tüm veri kümesini bellek üzerinde tutmak yerine, sadece istenen sayfayı bellek üzerinde tutarak bellek kullanımını optimize eder.
-
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.
-
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());
}
Açıklama
- PageRequest Oluşturulması:
PageRequest pageRequest = PageRequest.of(request.getPage(), request.getSize(), Sort.by(Sort.Direction.ASC, "amount"));
-
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 birPageRequest
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ınamount
alanına göre artan sırada sıralanacağını belirtir. Bu, ürünleri fiyatlarına göre artan sırada sıralar.
- Veritabanı Sorgusu:
Page<Product> products = productRepository.findAll(productSpecification, pageRequest);
-
productRepository.findAll(Specification spec, Pageable pageable)
metodu, belirli bir spesifikasyona ve sayfalama kriterlerine göre veritabanından kayıtları getirir. - Bu örnekte,
productSpecification
vepageRequest
kullanılarak, belirli bir sayfaya ait ürünleramount
alanına göre sıralanmış olarak getirilir.
- Sonuçların Dönüşümü:
return ProductConverter.toResponse(products.stream().toList());
- Veritabanından getirilen
Product
nesneleriProductResponse
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)