Spring Data JPA-তে Pageable এবং Sort ইন্টারফেসগুলি খুবই গুরুত্বপূর্ণ, কারণ এগুলোর মাধ্যমে আপনি পেজিনেশন (Pagination) এবং সাজানো (Sorting) ডেটা সহজেই ম্যানেজ করতে পারেন। এই ইন্টারফেসগুলো Spring JPA-কে আপনার ডেটাবেস থেকে বড় ডেটাসেট গুলি সহজে এবং কার্যকরভাবে পরিসীমাবদ্ধ এবং সাজানোর সুবিধা দেয়।
এখানে Pageable এবং Sort ইন্টারফেস ব্যবহার করার উদাহরণ এবং তাদের সুবিধা আলোচনা করা হবে।
1. Pageable Interface
Pageable ইন্টারফেসটি ডেটাবেস থেকে ডেটা পেজিনেশন করার জন্য ব্যবহৃত হয়। পেজিনেশন ডেটার একটি নির্দিষ্ট সাইজের পৃষ্ঠায় বিভক্ত করে এবং এটি ডেটার সবগুলো পৃষ্ঠায় নেভিগেশন করার সুবিধা দেয়।
Pageable এর প্রধান ফিচার:
- Page: এটি পেজের ডেটা সংরক্ষণ করে।
- Size: এটি প্রতি পেজে কতটি রেকর্ড থাকতে হবে তা নির্ধারণ করে।
- Page number: এটি পেজের সংখ্যা নির্ধারণ করে।
- Sort: এটি ডেটা সাজানোর জন্য ব্যবহৃত হয়।
2. Sort Interface
Sort ইন্টারফেসটি Spring Data JPA-তে ডেটা সাজানোর জন্য ব্যবহৃত হয়। এটি Ascending (ASC) বা Descending (DESC) অর্ডারে ডেটা সাজাতে সাহায্য করে।
Pageable এবং Sort এর ব্যবহারের উদাহরণ
১. Pageable এবং Sort এর সাথে Repository তৈরি করা
Spring Data JPA-তে PagingAndSortingRepository ইন্টারফেস ব্যবহার করে পেজিনেশন এবং সাজানোর জন্য সহজে মেথড তৈরি করা যায়।
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
// Pageable এর মাধ্যমে পেজিনেশন
Page<Product> findByNameContaining(String name, Pageable pageable);
// Sort এর মাধ্যমে সাজানো
List<Product> findByNameContaining(String name, Sort sort);
}
এখানে:
- findByNameContaining(): এই মেথডটি
nameফিল্ডে নির্দিষ্ট কিছু শব্দ বা অংশ অনুসন্ধান করে, এবং Pageable ব্যবহার করে পেজিনেশন প্রয়োগ করে। - findByNameContaining(): দ্বিতীয় মেথডটি Sort ব্যবহার করে ডেটা সাজানোর জন্য ব্যবহৃত হয়।
২. Pageable এবং Sort এর সাথে Service Layer
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
// Pageable এর মাধ্যমে পেজিনেশন
public Page<Product> getPaginatedProducts(int page, int size) {
Pageable pageable = PageRequest.of(page, size); // Page number এবং size নির্ধারণ
return productRepository.findByNameContaining("Phone", pageable); // পেজিনেটেড ডেটা
}
// Sort এর মাধ্যমে সাজানো
public List<Product> getSortedProducts() {
Sort sort = Sort.by(Sort.Order.asc("name")); // নাম অনুযায়ী সাজানো (ascending)
return productRepository.findByNameContaining("Phone", sort); // সাজানো ডেটা
}
}
এখানে:
- PageRequest.of(page, size): এটি একটি পেজ রিকোয়েস্ট তৈরি করে, যেখানে
pageহলো পেজের সংখ্যা এবংsizeহলো প্রতি পেজে রেকর্ডের সংখ্যা। - Sort.by(Sort.Order.asc("name")): এখানে ডেটাকে নাম অনুসারে ascending (ASC) অর্ডারে সাজানো হচ্ছে।
৩. Controller Layer এ Pageable এবং Sort ব্যবহার করা
Spring Boot অ্যাপ্লিকেশনে Pageable এবং Sort ব্যবহার করে পেজিনেশন এবং সাজানো ডেটা REST API এর মাধ্যমে প্রেরণ করা যায়।
import org.springframework.beans.factory.annotation.Autowired;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@Autowired
private ProductService productService;
// পেজিনেটেড ডেটা রিটার্ন করা
@GetMapping("/products")
public Page<Product> getProducts(@RequestParam int page, @RequestParam int size) {
return productService.getPaginatedProducts(page, size);
}
// সাজানো ডেটা রিটার্ন করা
@GetMapping("/products/sorted")
public List<Product> getSortedProducts() {
return productService.getSortedProducts();
}
}
এখানে:
- getProducts() মেথডটি পেজিনেটেড ডেটা রিটার্ন করবে।
- getSortedProducts() মেথডটি সাজানো ডেটা রিটার্ন করবে।
4. Pageable এবং Sort এর কনফিগারেশন
Pageable Configuration:
Pageable কনফিগারেশনে page (পেজ নম্বর) এবং size (প্রতি পেজে রেকর্ড সংখ্যা) নির্ধারণ করা হয়।
PageRequest.of(page, size, Sort.by(Sort.Order.asc("name")));
Sort Configuration:
Sort কনফিগারেশন ডেটাকে ascending (ASC) বা descending (DESC) অর্ডারে সাজানোর জন্য ব্যবহৃত হয়।
Sort sort = Sort.by(Sort.Order.asc("name"));
এখানে, Sort.Order.asc("name") ব্যবহার করে name ফিল্ড অনুযায়ী ডেটা ascending order-এ সাজানো হচ্ছে। আপনি Sort.Order.desc() ব্যবহার করে ডেটা descending order-এ সাজাতে পারেন।
সারাংশ
- Pageable এবং Sort ইন্টারফেস Spring Data JPA-তে পেজিনেশন এবং সাজানো ডেটার জন্য ব্যবহৃত হয়।
- Pageable পেজ রিকোয়েস্ট তৈরি করতে ব্যবহৃত হয়, যেখানে page এবং size নির্ধারণ করা হয়।
- Sort ডেটাকে নির্দিষ্ট ক্রমে সাজাতে ব্যবহৃত হয়, যেমন ascending বা descending অর্ডারে।
- JpaRepository অথবা PagingAndSortingRepository ইন্টারফেসের মাধ্যমে আপনি সহজেই পেজিনেশন এবং সাজানো ডেটা ফেচ করতে পারেন।
এই ফিচারগুলো Spring Boot JPA-তে ডেটাবেস অপারেশনকে আরও কার্যকর এবং দক্ষভাবে পরিচালনা করতে সাহায্য করে।