JPA (Java Persistence API) আপনাকে ডেটাবেস থেকে ডেটা ফেচ করার জন্য JPQL (Java Persistence Query Language) অথবা Criteria API ব্যবহার করতে দেয়। যখন আপনার কাছে বড় ডেটাসেট থাকে এবং আপনাকে ডেটা পৃষ্ঠায় (pagination) লোড করতে হয়, তখন Query.setMaxResults() এবং Query.setFirstResult() ব্যবহার করা হয়।
Query.setMaxResults(): এটি জিজ্ঞাসার মাধ্যমে ফেরত আসা সর্বোচ্চ রেকর্ডের সংখ্যা সীমাবদ্ধ করে।Query.setFirstResult(): এটি জিজ্ঞাসার মাধ্যমে ফেরত আসা রেকর্ডের প্রথম অবস্থান (offset) নির্ধারণ করে।
এই দুটি পদ্ধতি একসাথে ব্যবহার করে pagination বা ডেটার একটি নির্দিষ্ট পরিমাণের ফলাফল স্কেল করা যায়।
১. Query.setMaxResults()
setMaxResults() পদ্ধতিটি ব্যবহার করে আপনি একটি কুয়েরি থেকে সর্বোচ্চ কতটি রেকর্ড রিটার্ন হবে তা নির্ধারণ করতে পারেন। এটি পেজিনেশন প্রয়োগ করতে ব্যবহৃত হয়, যেখানে আপনি চাইলে শুধুমাত্র নির্দিষ্ট সংখ্যক রেকর্ড ফেরত পেতে পারেন।
setMaxResults() উদাহরণ:
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
public class EmployeeService {
private EntityManager entityManager;
public List<Employee> getEmployees(int maxResults) {
String jpql = "SELECT e FROM Employee e";
Query query = entityManager.createQuery(jpql);
query.setMaxResults(maxResults); // Limit the number of results
return query.getResultList();
}
}
এখানে:
query.setMaxResults(maxResults): এটিEmployeeEntity থেকে সর্বোচ্চmaxResultsসংখ্যক রেকর্ড ফেরত আনবে।
ব্যবহার:
যেমন, আপনি যদি শুধুমাত্র 10টি রেকর্ড পেতে চান, তাহলে:
getEmployees(10);
এটি 10টির বেশি রেকর্ড রিটার্ন করবে না, এমনকি যদি ডেটাবেসে আরও রেকর্ড থাকে।
২. Query.setFirstResult()
setFirstResult() পদ্ধতিটি ব্যবহার করে আপনি কুয়েরি ফলাফলের প্রথম রেকর্ড থেকে কতগুলি রেকর্ড শুরু হবে তা নির্ধারণ করতে পারেন। এটি সাধারণত pagination এর জন্য ব্যবহৃত হয়, যেখানে আপনি প্রথম রেকর্ডের অবস্থান এবং পরবর্তী রেকর্ডের জন্য একটি অস্থায়ী "offset" নির্ধারণ করেন।
setFirstResult() উদাহরণ:
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
public class EmployeeService {
private EntityManager entityManager;
public List<Employee> getEmployees(int pageNumber, int pageSize) {
String jpql = "SELECT e FROM Employee e";
Query query = entityManager.createQuery(jpql);
int firstResult = (pageNumber - 1) * pageSize;
query.setFirstResult(firstResult); // Start from the first result of this page
query.setMaxResults(pageSize); // Limit the number of results per page
return query.getResultList();
}
}
এখানে:
query.setFirstResult(firstResult): এটি কুয়েরি ফলাফলের শুরু পয়েন্ট নির্ধারণ করে।firstResultহল যে পৃষ্ঠাটি আপনি দেখতে চান তার প্রথম রেকর্ডের ইনডেক্স।query.setMaxResults(pageSize): এটি প্রতি পৃষ্ঠায় সর্বোচ্চ রেকর্ডের সংখ্যা সীমাবদ্ধ করে।
ব্যবহার:
যেমন, যদি আপনি দ্বিতীয় পৃষ্ঠার প্রথম 10 রেকর্ড দেখতে চান:
getEmployees(2, 10); // 2nd page, 10 records per page
এটি প্রথম 10টি রেকর্ড বাদ দিয়ে পরবর্তী 10টি রেকর্ড রিটার্ন করবে (যেটি ১১-২০ রেকর্ডের মধ্যে হবে)।
৩. Pagination Example
যেমন, আপনি ১ম পৃষ্ঠা থেকে ১০টি রেকর্ড এবং ২য় পৃষ্ঠা থেকে ১০টি রেকর্ড দেখতে চান, তখন আপনি setFirstResult() এবং setMaxResults() দুটি পদ্ধতি একত্রে ব্যবহার করবেন।
Pagination উদাহরণ:
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
public class EmployeeService {
private EntityManager entityManager;
public List<Employee> getEmployees(int pageNumber, int pageSize) {
String jpql = "SELECT e FROM Employee e";
Query query = entityManager.createQuery(jpql);
int firstResult = (pageNumber - 1) * pageSize; // Calculate the first result (offset)
query.setFirstResult(firstResult); // Set the starting point
query.setMaxResults(pageSize); // Set the maximum number of results to return
return query.getResultList();
}
}
ব্যবহার:
- প্রথম পৃষ্ঠা:
getEmployees(1, 10); // 1st page, 10 records per page
- দ্বিতীয় পৃষ্ঠা:
getEmployees(2, 10); // 2nd page, 10 records per page
এখানে, setFirstResult() এবং setMaxResults() ব্যবহার করে আপনি কার্যকরভাবে pagination বাস্তবায়ন করতে পারেন।
৪. টোটাল রেকর্ড এবং পৃষ্ঠার সংখ্যা বের করা
কখনও কখনও, আপনি মোট রেকর্ড সংখ্যা জানতে চান এবং সেই অনুযায়ী পৃষ্ঠার সংখ্যা বের করতে চান। এটি সাধারণত পেজিনেশনের ক্ষেত্রে ব্যবহৃত হয়।
টোটাল রেকর্ড কুয়েরি উদাহরণ:
public long getTotalEmployeeCount() {
String jpql = "SELECT COUNT(e) FROM Employee e";
Query query = entityManager.createQuery(jpql);
return (long) query.getSingleResult();
}
এটি ডেটাবেস থেকে মোট কর্মচারী সংখ্যা ফেরত দেবে। আপনি এই সংখ্যার ভিত্তিতে পৃষ্ঠার সংখ্যা হিসাব করতে পারবেন।
পৃষ্ঠার সংখ্যা হিসাব করা:
long totalEmployees = getTotalEmployeeCount();
int pageSize = 10;
int totalPages = (int) Math.ceil(totalEmployees / (double) pageSize);
এখানে:
totalEmployees: মোট কর্মচারী সংখ্যা।pageSize: প্রতিটি পৃষ্ঠার রেকর্ড সংখ্যা।totalPages: মোট পৃষ্ঠার সংখ্যা।
সারাংশ
Query.setMaxResults() এবং Query.setFirstResult() পদ্ধতিগুলি JPA-তে pagination এবং result limiting এর জন্য ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি:
setMaxResults(): সর্বোচ্চ কতটি রেকর্ড ফেরত আসবে তা সীমাবদ্ধ করতে পারেন।setFirstResult(): কুয়েরি ফলাফল থেকে প্রথম রেকর্ডের অবস্থান নির্ধারণ করতে পারেন, যা পৃষ্ঠায় (pagination) ডেটা লোড করতে সহায়তা করে।
এই দুটি পদ্ধতি একসাথে ব্যবহার করে আপনি কার্যকরভাবে পৃষ্ঠায় ডেটা লোড এবং pagination সিস্টেম তৈরি করতে পারবেন, যা ডেটাবেস থেকে বড় পরিমাণ ডেটা লোড করার সময় কার্যকারিতা বৃদ্ধি করতে সহায়তা করে।
Read more