Pagination হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যখন আপনি ডেটাবেস থেকে একাধিক রেকর্ড রিটার্ন করতে চান, তবে সমস্ত রেকর্ড একসাথে রিটার্ন না করে, পরিবর্তে ছোট ছোট পৃষ্ঠাগুলিতে (pages) ভাগ করে রিটার্ন করেন। iBATIS (এখন MyBatis) এ pagination ইমপ্লিমেন্ট করার জন্য, সাধারণত SQL কুয়েরি ব্যবহার করা হয় যা LIMIT এবং OFFSET ক্লজ ব্যবহার করে, যাতে নির্দিষ্ট সংখ্যক রেকর্ড এক্সট্র্যাক্ট করা যায়।
iBATIS-এ pagination সাধারনত SQL queries বা parameterized queries দ্বারা করা হয়, যেখানে পেজ নম্বর এবং প্রতি পৃষ্ঠায় প্রদর্শিত রেকর্ডের সংখ্যা প্যারামিটার হিসেবে পাস করা হয়।
নিচে iBATIS (MyBatis) এর মাধ্যমে pagination ইমপ্লিমেন্ট করার একটি পূর্ণ উদাহরণ দেওয়া হলো।
iBATIS এ Pagination ইমপ্লিমেন্ট করার উদাহরণ
ধরা যাক, আমাদের একটি User টেবিল রয়েছে এবং আমরা ব্যবহারকারীদের একটি নির্দিষ্ট পৃষ্ঠায় (page) ভাগ করে রিটার্ন করতে চাই।
1. SQL Mapping File (User.xml)
<sqlMap namespace="User">
<!-- Select query for pagination: Get users with limit and offset -->
<select id="getUsersByPage" parameterClass="map" resultClass="User">
SELECT id, name, email
FROM users
ORDER BY id
LIMIT #limit# OFFSET #offset#
</select>
</sqlMap>
ব্যাখ্যা:
- LIMIT: SQL কুয়েরি থেকে প্রতি পৃষ্ঠায় প্রদর্শিত রেকর্ডের সংখ্যা সীমিত করে। এটি পেজ সাইজ হিসেবে কাজ করে।
- OFFSET: এটি নির্ধারণ করে যে কুয়েরি কতগুলো রেকর্ড এড়িয়ে যাবে। এটি পেজ নম্বরের উপর ভিত্তি করে গণনা করা হয়।
এখানে, #limit# এবং #offset# প্যারামিটারগুলো parameterClass="map" এর মাধ্যমে পাস করা হবে।
2. Java Entity Class (User.java)
public class User {
private int id;
private String name;
private String email;
// Getters and setters
}
ব্যাখ্যা:
- User ক্লাসটি আমাদের User টেবিলের প্রতিটি রেকর্ডের জন্য একটি Java object এর প্রতিনিধিত্ব করে।
3. Java Code to Fetch Paginated Data (Main.java)
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Main.class.getResourceAsStream("/SqlMapConfig.xml"));
try (SqlSession session = sqlSessionFactory.openSession()) {
// Define page number and page size
int pageNumber = 1; // First page
int pageSize = 5; // Number of records per page
// Calculate the offset
int offset = (pageNumber - 1) * pageSize;
// Create parameters map for pagination
Map<String, Integer> params = new HashMap<>();
params.put("limit", pageSize);
params.put("offset", offset);
// Fetch users for the specific page
List<User> users = session.selectList("User.getUsersByPage", params);
System.out.println("Page " + pageNumber + " of users:");
for (User user : users) {
System.out.println("ID: " + user.getId() + ", Name: " + user.getName() + ", Email: " + user.getEmail());
}
}
}
}
ব্যাখ্যা:
- pageNumber এবং pageSize প্যারামিটার গুলি নির্ধারণ করে প্রতি পৃষ্ঠায় কতগুলি রেকর্ড আসবে এবং কোন পৃষ্ঠাটি দেখা হবে।
- offset গণনা করা হয়:
offset = (pageNumber - 1) * pageSize। - params.put("limit", pageSize); এবং params.put("offset", offset); এর মাধ্যমে পেজ সাইজ এবং অফসেট প্যারামিটার গুলি iBATIS এর কুয়েরিতে পাস করা হয়েছে।
4. SQL Query Explanation
SELECT id, name, email
FROM users
ORDER BY id
LIMIT #limit# OFFSET #offset#
- LIMIT #limit#: এই অংশটি SQL কুয়েরিতে প্রতি পৃষ্ঠায় কতগুলি রেকর্ড রিটার্ন হবে তা নিয়ন্ত্রণ করে। এটি
#limit#প্যারামিটার দ্বারা নিয়ন্ত্রিত। - OFFSET #offset#: এটি নির্ধারণ করে কোন রেকর্ড থেকে শুরু হবে। এটি সাধারণত পেজ নম্বরের উপর ভিত্তি করে গণনা করা হয়। উদাহরণস্বরূপ, যদি
pageNumber1 হয় এবংpageSize5 হয়, তাহলে প্রথম পৃষ্ঠার জন্যoffsetহবে 0; দ্বিতীয় পৃষ্ঠার জন্যoffsetহবে 5, ইত্যাদি।
5. Pagination Example with Multiple Pages
এখন আপনি পেজ নম্বর পরিবর্তন করে বিভিন্ন পৃষ্ঠার রেকর্ড দেখতে পারবেন। উদাহরণস্বরূপ:
// Fetch second page of users
int pageNumber = 2; // Second page
int pageSize = 5; // Number of records per page
int offset = (pageNumber - 1) * pageSize;
এভাবে, আপনি প্রথম, দ্বিতীয় বা অন্য পৃষ্ঠা থেকে ডেটা দেখতে পারবেন।
6. Advantages of Pagination in iBATIS
- Improved Performance:
- Pagination ব্যবহার করার মাধ্যমে, আপনি large result sets একসাথে লোড না করে সেগুলিকে ছোট ছোট অংশে ভাগ করতে পারবেন। এর ফলে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত হবে, কারণ আপনি একে একে রেকর্ড লোড করবেন।
- Reduced Memory Consumption:
- একাধিক রেকর্ড একসাথে লোড না করে, শুধুমাত্র পেজের জন্য প্রয়োজনীয় রেকর্ড লোড করা হয়, ফলে মেমরি ব্যবহারের পরিমাণ কমে।
- User Experience:
- Pagination ব্যবহার করলে ব্যবহারকারীরা সহজেই বড় ডেটাসেট থেকে নির্দিষ্ট অংশ দেখতে পারে, যা উন্নত ব্যবহারকারীর অভিজ্ঞতা (UX) প্রদান করে।
iBATIS (MyBatis)-এ pagination সহজেই ইমপ্লিমেন্ট করা যায় SQL কুয়েরি ব্যবহার করে LIMIT এবং OFFSET প্যারামিটার। এই পদ্ধতিতে, আপনি একাধিক রেকর্ডের মধ্যে ছোট ছোট অংশে বিভক্ত করে ডেটা রিটার্ন করতে পারবেন এবং ব্যবহারকারীদের সহজে ডেটা দেখতে সহায়ক একটি পরিবেশ তৈরি করতে পারবেন।
Parameters (limit, offset) কনফিগার করে পেজ নম্বর এবং রেকর্ডের সংখ্যা নিয়ন্ত্রণ করা হয়। iBATIS-এ pagination কার্যকরভাবে পারফরম্যান্স এবং মেমরি ব্যবহারের উন্নতি করতে সহায়তা করে, বিশেষ করে যখন বড় ডেটাসেট বা বড় টেবিলের সাথে কাজ করা হয়।
Read more