JPA (Java Persistence API) এ Pagination এবং Sorting খুবই গুরুত্বপূর্ণ ফিচার যা ডেটাবেস থেকে বড় পরিমাণ ডেটা নিয়ে কাজ করার সময় কার্যকারিতা উন্নত করে। Pagination ব্যবহার করে আপনি নির্দিষ্ট পরিমাণ ডেটা ফেচ করতে পারেন এবং Sorting ব্যবহার করে আপনি ডেটাকে কোনো নির্দিষ্ট অর্ডারে সাজাতে পারেন। JPA তে pagination এবং sorting এর জন্য বেশ কিছু টুল রয়েছে, যা সহজে ডেটা এক্সট্র্যাকশন এবং প্রদর্শন করতে সহায়তা করে।
Pagination (পৃষ্ঠা ভাগ) কী?
Pagination হলো একটি প্রক্রিয়া যার মাধ্যমে ডেটার বড় সেটকে ছোট ছোট অংশে ভাগ করা হয়। এটি বিশেষভাবে উপকারী যখন ডেটাবেসে অনেক রেকর্ড থাকে এবং আপনি সমস্ত ডেটা একসাথে লোড করতে চান না।
JPA তে pagination সাধারণত Query তে setFirstResult() এবং setMaxResults() মেথড ব্যবহার করে করা হয়। এটি ডেটা রিটার্ন করার জন্য প্রথম রেকর্ডের অবস্থান এবং এক পেজে কতগুলো রেকর্ড রিটার্ন করতে হবে তা নির্ধারণ করে।
Sorting (সাজানো) কী?
Sorting হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাকে নির্দিষ্ট ক্রমে সাজানো হয়। এটি আপনাকে অর্ডারে ডেটা প্রদর্শন করতে সহায়তা করে, যেমন ascending বা descending।
JPA তে sorting সাধারণত Query তে Order By ক্লজ ব্যবহার করে করা হয়, যা নির্দিষ্ট কলাম অনুযায়ী ডেটাকে সাজাতে সহায়তা করে।
Pagination এবং Sorting এর উদাহরণ
এখানে একটি Employee Entity রয়েছে এবং আমরা Pagination এবং Sorting প্রক্রিয়া ব্যবহার করে JPA তে ডেটা এক্সট্র্যাক্ট করব।
1. Employee Entity Example
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private Double salary;
// Constructors, Getters and Setters
public Employee(Long id, String name, Double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
2. EmployeeRepository Interface (Pagination and Sorting)
Spring Data JPA ব্যবহার করলে আমরা সহজেই pagination এবং sorting যোগ করতে পারি। নিচে একটি EmployeeRepository interface আছে যা PagingAndSortingRepository ইন্টারফেস এক্সটেন্ড করেছে।
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long> {
// You can define custom queries here if needed
}
এখানে:
- PagingAndSortingRepository ইন্টারফেসটি Employee Entity এর জন্য pagination এবং sorting সাপোর্ট করে।
3. Pagination and Sorting in Service Layer
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
// Method for Pagination and Sorting
public Page<Employee> getEmployeesPaginatedAndSorted(int page, int size, String sortBy, boolean ascending) {
Sort sort = ascending ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
Pageable pageable = PageRequest.of(page, size, sort);
return employeeRepository.findAll(pageable);
}
}
এখানে:
- PageRequest.of(page, size, sort): এটি pagination এবং sorting একত্রে কনফিগার করে। এখানে
pageহলো যে পৃষ্ঠায় আপনি ডেটা দেখতে চান এবংsizeহলো পৃষ্ঠায় কতটি রেকর্ড দেখতে চান।sortByহলো সেই কলাম, যার ওপর ভিত্তি করে ডেটা সাজানো হবে এবংascendingহলো ডেটা সাজানোর অর্ডার (ascending বা descending)। - findAll(pageable): এটি repository থেকে pagination এবং sorting সহ ডেটা ফেচ করে।
4. Controller Layer
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.data.domain.Page;
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
// Endpoint to get paginated and sorted employees
@GetMapping("/employees")
public Page<Employee> getEmployees(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "5") int size,
@RequestParam(defaultValue = "name") String sortBy,
@RequestParam(defaultValue = "true") boolean ascending) {
return employeeService.getEmployeesPaginatedAndSorted(page, size, sortBy, ascending);
}
}
এখানে:
/employeesAPI এর মাধ্যমে আমরা পৃষ্ঠাভিত্তিক ডেটা এবং সোর্টিং কনফিগার করতে পারি।@RequestParamব্যবহার করে ইউজার থেকে পেজ নম্বর, সাইজ, সোর্টিং কলাম এবং অর্ডার প্যারামিটার নেওয়া হচ্ছে।
5. Example Output
যদি আপনি URL এ /employees?page=1&size=5&sortBy=salary&ascending=false পাঠান, তাহলে এটি দ্বিতীয় পৃষ্ঠা থেকে ৫টি কর্মচারী রেকর্ড নিয়ে আসবে, যাদের বেতন descending অর্ডারে সাজানো থাকবে।
JSON Output (Example):
{
"content": [
{
"id": 1,
"name": "John Doe",
"salary": 75000.0
},
{
"id": 2,
"name": "Jane Smith",
"salary": 68000.0
},
{
"id": 3,
"name": "Tom Brown",
"salary": 60000.0
},
{
"id": 4,
"name": "Emma White",
"salary": 58000.0
},
{
"id": 5,
"name": "Michael Green",
"salary": 55000.0
}
],
"pageable": {
"sort": {
"unsorted": false,
"sorted": true,
"empty": false
},
"pageSize": 5,
"pageNumber": 1,
"offset": 5,
"unpaged": false,
"paged": true
},
"totalPages": 3,
"totalElements": 15,
"last": false,
"size": 5,
"number": 1,
"sort": {
"sorted": true,
"unsorted": false,
"empty": false
},
"first": false,
"numberOfElements": 5,
"empty": false
}
এখানে:
- content: পৃষ্ঠায় প্রদর্শিত ডেটার তালিকা।
- totalPages: মোট পৃষ্ঠার সংখ্যা।
- totalElements: মোট রেকর্ডের সংখ্যা।
- size: প্রতি পৃষ্ঠায় রেকর্ডের সংখ্যা।
- sort: ডেটার সোর্টিং তথ্য।
সারাংশ
JPA Pagination এবং Sorting ডেটার বড় সেটের সাথে কাজ করার সময় কার্যকারিতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে সহায়তা করে। Pageable এবং Sort ক্লাস ব্যবহার করে Spring Data JPA তে সহজেই pagination এবং sorting কার্যকর করা যায়। JPA Pagination ডেটা এক্সট্র্যাক্ট করার জন্য setFirstResult() এবং setMaxResults() মেথড ব্যবহার করে, আর Sorting ডেটাকে OrderBy ক্লজ বা Sort ক্লাসের মাধ্যমে সাজানো যায়।
এটি ডেটাবেস থেকে বড় পরিমাণ ডেটা টেনে আনার সময় প্রয়োজনীয় তথ্য ফেচ করে, সঠিক ভাবে সাজিয়ে এবং পৃষ্ঠা অনুযায়ী লোড করে, যাতে সিস্টেমে কর্মক্ষমতা বজায় থাকে এবং ব্যবহারকারী ডেটা সহজে দেখতে পারে।
Read more