স্প্রিং জেডিবিসি (Spring JDBC) তে Pagination এবং Sorting প্রক্রিয়া খুবই গুরুত্বপূর্ণ, কারণ এটি ডেটাবেস থেকে বড় ডেটাসেটের মধ্যে নির্দিষ্ট পরিমাণ তথ্য বের করতে সহায়তা করে এবং ডেটা সঠিকভাবে সাজাতে সাহায্য করে। এই দুটি প্রক্রিয়া সাধারণত SQL কুয়েরি এর সাথে যুক্ত থাকে।
Spring JDBC তে Pagination এবং Sorting:
স্প্রিং জেডিবিসি তে Pagination এবং Sorting করতে হলে, সাধারণত SQL কুয়েরিতে LIMIT (pagination) এবং ORDER BY (sorting) ব্যবহার করা হয়। স্প্রিং JdbcTemplate এর মাধ্যমে এই প্রক্রিয়া সহজভাবে করা যায়।
Pagination:
Pagination ব্যবহার করা হয় যখন আপনি ডেটাবেস থেকে শুধু কিছু নির্দিষ্ট রেকর্ড নিতে চান। এটি সাধারণত LIMIT এবং OFFSET ব্যবহার করে।
Sorting:
Sorting ব্যবহার করা হয় ডেটা সাজানোর জন্য। ORDER BY SQL কুয়েরি স্টেটমেন্টে সাধারণত ASC (ascending) বা DESC (descending) অপশন সহ ব্যবহার করা হয়।
Pagination এবং Sorting উদাহরণ:
এখানে আমরা একটি উদাহরণ তৈরি করব যেখানে Pagination এবং Sorting এর সাহায্যে কর্মী (Employee) টেবিল থেকে নির্দিষ্ট পরিমাণ রেকর্ড এবং সেগুলোকে নির্দিষ্ট অর্ডারে সাজানো হবে।
১. Maven ডিপেনডেন্সি:
এটি পূর্ববর্তী উদাহরণের মতোই থাকবে।
<dependencies>
<!-- Spring JDBC Dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
২. DAO (Data Access Object) ক্লাস:
এখন, আমরা Pagination এবং Sorting এর সাথে JdbcTemplate ব্যবহার করে ডেটাবেস থেকে ডেটা ফেচ করার জন্য একটি DAO ক্লাস তৈরি করব।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// Setter method for JdbcTemplate
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// Method for Pagination and Sorting
public List<Employee> getEmployees(int pageNo, int pageSize, String sortBy, boolean ascending) {
// SQL query for pagination and sorting
String orderBy = ascending ? "ASC" : "DESC";
String sql = "SELECT * FROM employee ORDER BY " + sortBy + " " + orderBy + " LIMIT ?, ?";
// Calculate the offset based on pageNo and pageSize
int offset = (pageNo - 1) * pageSize;
// Fetch employees with pagination and sorting
return jdbcTemplate.query(sql, new Object[]{offset, pageSize}, new EmployeeRowMapper());
}
// Fetch employee by ID
public Employee getEmployeeById(int id) {
String sql = "SELECT * FROM employee WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new EmployeeRowMapper());
}
}
class Employee {
private int id;
private String name;
private double salary;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int 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;
}
}
class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setSalary(rs.getDouble("salary"));
return employee;
}
}
৩. মেইন ক্লাস:
এখন, আমরা Pagination এবং Sorting প্রক্রিয়া ব্যবহার করে EmployeeDao ক্লাসের মেথডগুলি কল করব।
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class HelloSpringJDBCWithPaginationAndSorting {
public static void main(String[] args) {
// Load the Spring context
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// Get the EmployeeDao bean
EmployeeDao employeeDao = (EmployeeDao) context.getBean("employeeDao");
// Define page size and page number for pagination
int pageNo = 1; // Page 1
int pageSize = 5; // 5 records per page
// Define the column for sorting and sort order
String sortBy = "salary"; // Sort by salary
boolean ascending = false; // Descending order
// Get paginated and sorted employees
List<Employee> employees = employeeDao.getEmployees(pageNo, pageSize, sortBy, ascending);
// Print the employees
for (Employee employee : employees) {
System.out.println("Employee ID: " + employee.getId() +
", Name: " + employee.getName() +
", Salary: " + employee.getSalary());
}
}
}
৪. ডেটাবেস টেবিল:
আপনার MySQL ডেটাবেসে একটি employee টেবিল তৈরি করুন:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2)
);
Pagination এবং Sorting ব্যাখ্যা:
LIMITএবংOFFSET: Pagination করার জন্য SQL কুয়েরিতেLIMITএবংOFFSETব্যবহার করা হয়।LIMITনির্দিষ্ট সংখ্যক রেকর্ড ফেচ করে এবংOFFSETথেকে শুরু করে কতগুলি রেকর্ড নিয়ে আসা হবে তা নির্ধারণ করে।OFFSETহলpageNo * pageSize।ORDER BY: Sorting করার জন্য SQL কুয়েরিতেORDER BYব্যবহৃত হয়। এটি নির্দিষ্ট কলাম অনুযায়ী ডেটা সাজাতে সাহায্য করে।ASC(ascending) বাDESC(descending) দিয়ে সাজানোর অর্ডার নির্ধারণ করা হয়।- Pagination: Pagination কার্যকরী হয় যখন আপনি বড় ডেটাসেট থেকে শুধু কিছু রেকর্ড আনতে চান।
pageNoএবংpageSizeপ্যারামিটার ব্যবহার করে প্রতিটি পৃষ্ঠার জন্য নির্দিষ্ট পরিমাণ রেকর্ড ফেচ করা হয়। - Sorting: Sorting করার জন্য আপনি কলামের নাম (যেমন
salary,name) এবং অর্ডার (ASC বা DESC) প্যারামিটার ব্যবহার করে ডেটাকে সাজাতে পারেন।
উপসংহার:
স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Pagination এবং Sorting একসাথে একটি শক্তিশালী এবং নমনীয় উপায় প্রদান করে ডেটাবেস থেকে ডেটা ফেচ করার জন্য। LIMIT, OFFSET, এবং ORDER BY এর মাধ্যমে আপনি সহজেই বড় ডেটাসেটের মধ্যে নির্দিষ্ট পরিমাণ ডেটা সঠিক অর্ডারে ফেচ করতে পারেন।
ডেটাবেস থেকে ডেটা সংগ্রহ করার সময় Pagination (পেজিনেশন) এবং Sorting (সোর্টিং) অত্যন্ত গুরুত্বপূর্ণ দুটি প্রক্রিয়া। এগুলি অ্যাপ্লিকেশনগুলোর কর্মক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতাকে অনেক উন্নত করে, বিশেষত যখন ডেটা খুব বড় এবং সংখ্যা বিশাল হয়। স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহারের মাধ্যমে এই দুটি ফিচার সহজভাবে পরিচালনা করা যায়।
Pagination (পেজিনেশন) এর প্রয়োজনীয়তা:
Pagination এর মাধ্যমে বড় ডেটাসেটগুলিকে পেজের আকারে বিভক্ত করা হয়, যাতে একবারে এক পেজের ডেটা ব্যবহারকারীর কাছে প্রদর্শিত হয়। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন ডেটাবেসে বিশাল পরিমাণ ডেটা থাকে এবং ইউজার একবারে সব ডেটা দেখতে চায় না। পেজিনেশন ব্যবহারের মাধ্যমে আপনি একটি সীমিত পরিমাণ ডেটা প্রতিবারে রিট্রিভ করতে পারেন, যার ফলে কর্মক্ষমতা উন্নত হয় এবং সার্ভারের উপর লোড কমে।
Pagination এর প্রধান সুবিধাগুলি:
- কর্মক্ষমতা বৃদ্ধি: পেজিনেশন ডেটা আনার সময় সীমিত পরিমাণ ডেটা ব্যবহার করে, ফলে সার্ভারের উপর অতিরিক্ত লোড কমে এবং অ্যাপ্লিকেশন দ্রুত হয়।
- ইউজার এক্সপিরিয়েন্স: দীর্ঘ ডেটা লিস্টের পরিবর্তে ইউজার পেজ অনুযায়ী ডেটা দেখতে পারে, যার ফলে তাদের অভিজ্ঞতা আরও ভালো হয়।
- ডেটাবেসের কার্যকারিতা: ডেটাবেসের বড় রেজাল্ট সেট কম করা যায়, ফলে কুয়েরি প্রসেসিং দ্রুত হয় এবং ডেটাবেস রিসোর্সের অপচয় কমে।
Spring JDBC তে Pagination:
স্প্রিং জেডিবিসি ব্যবহার করে Pagination সাধারণত LIMIT এবং OFFSET SQL কুয়েরি প্যারামিটার ব্যবহার করে করা হয়। LIMIT একটি নির্দিষ্ট সংখ্যক রেকর্ড ফেরত দেয় এবং OFFSET নির্দিষ্ট সূচনা পয়েন্ট থেকে ডেটা ফেরত নেয়।
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.List;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// পেজিনেশনসহ ডেটা রিট্রিভ করা
public List<Employee> getEmployees(int pageNo, int pageSize) {
String sql = "SELECT * FROM employee LIMIT ? OFFSET ?";
// OFFSET হিসাব করা: (পেজ নম্বর - 1) * পেজ সাইজ
int offset = (pageNo - 1) * pageSize;
return jdbcTemplate.query(sql, new Object[] {pageSize, offset}, new EmployeeRowMapper());
}
}
এখানে, pageNo এবং pageSize প্যারামিটার দ্বারা নির্ধারিত পেজ থেকে ডেটা রিট্রিভ করা হচ্ছে। LIMIT এবং OFFSET SQL কুয়েরি স্টেটমেন্টে পেজিনেশন প্রক্রিয়া প্রয়োগ করছে।
Sorting (সোর্টিং) এর প্রয়োজনীয়তা:
Sorting ডেটা সাজানোর প্রক্রিয়া, যা সাধারণত আলফাবেটিক, সংখ্যাগত, অথবা অন্য কোনো নির্দিষ্ট ক্রমে ডেটা প্রদর্শন করতে ব্যবহৃত হয়। যখন ডেটাবেসের মধ্যে বিশাল পরিমাণ ডেটা থাকে, তখন সঠিকভাবে সজ্জিত ডেটা ইউজারের জন্য আরও কার্যকর এবং দ্রুত অ্যাক্সেসযোগ্য হয়ে ওঠে।
Sorting এর প্রধান সুবিধাগুলি:
- উন্নত অনুসন্ধানযোগ্যতা: সঠিকভাবে সজ্জিত ডেটা ব্যবহারকারীর জন্য দ্রুত এবং সহজে অনুসন্ধানযোগ্য হয়।
- ব্যবহারকারীর অভিজ্ঞতা: ইউজাররা যখন ডেটা সঠিকভাবে সাজানো দেখতে পায়, তখন তাদের জন্য তথ্য খোঁজা এবং বিশ্লেষণ করা সহজ হয়।
- ডেটাবেস অপটিমাইজেশন: সজ্জিত ডেটা ডেটাবেসের ফিচার যেমন ইনডেক্সিংকে আরও কার্যকরী করে তোলে।
Spring JDBC তে Sorting:
Spring JDBC তে সোর্টিং সাধারণত SQL কুয়েরির ORDER BY ক্লজ ব্যবহার করে করা হয়। আপনি যেভাবে চান সেভাবে ডেটা সজ্জিত করতে পারেন, যেমন ASC (Ascending) বা DESC (Descending)।
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.List;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// সোর্টিংসহ ডেটা রিট্রিভ করা
public List<Employee> getEmployeesSorted(String sortBy, String sortOrder) {
String sql = "SELECT * FROM employee ORDER BY " + sortBy + " " + sortOrder;
return jdbcTemplate.query(sql, new EmployeeRowMapper());
}
}
এখানে, sortBy এবং sortOrder প্যারামিটার ব্যবহার করে ডেটা সজ্জিত করা হচ্ছে। sortBy দ্বারা কলামের নাম এবং sortOrder দ্বারা সজ্জার ধরণ (ASC বা DESC) নির্ধারিত হয়।
Pagination এবং Sorting একত্রে ব্যবহার:
প্রায়শই পেজিনেশন এবং সোর্টিং একত্রে ব্যবহার করা হয়, যেমন ব্যবহারকারী যখন ডেটা পেজিনেটেডভাবে দেখতে চায় এবং সেই ডেটা সঠিকভাবে সাজানোও থাকতে চায়।
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.List;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// পেজিনেশন এবং সোর্টিং একত্রে ডেটা রিট্রিভ করা
public List<Employee> getEmployees(int pageNo, int pageSize, String sortBy, String sortOrder) {
String sql = "SELECT * FROM employee ORDER BY " + sortBy + " " + sortOrder + " LIMIT ? OFFSET ?";
int offset = (pageNo - 1) * pageSize;
return jdbcTemplate.query(sql, new Object[] {pageSize, offset}, new EmployeeRowMapper());
}
}
এখানে, pageNo, pageSize, sortBy, এবং sortOrder প্যারামিটার ব্যবহার করে ডেটা পেজিনেটেড এবং সজ্জিত (sorted) হয়ে রিট্রিভ করা হচ্ছে।
উপসংহার:
- Pagination ডেটার পরিমাণ বেশি হলে কর্মক্ষমতা উন্নত করতে এবং ব্যবহারকারীর অভিজ্ঞতা বাড়াতে অপরিহার্য।
- Sorting ডেটার সঠিক ক্রমে প্রদর্শন নিশ্চিত করতে এবং অনুসন্ধানযোগ্যতা বৃদ্ধি করতে গুরুত্বপূর্ণ।
- Spring JDBC তে এই দুটি ফিচার খুব সহজভাবে SQL কুয়েরি মাধ্যমে বাস্তবায়ন করা যায়, যার ফলে ডেটাবেস অপারেশন আরও কার্যকর এবং কর্মক্ষম হয়।
স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Pagination (পাতা ভাগ করা) এবং Sorting (সাজানো) পরিচালনা করা বেশ সহজ। সাধারণত, SQL কুয়েরির মধ্যে LIMIT এবং OFFSET ব্যবহার করে Pagination এবং ORDER BY ব্যবহার করে Sorting সম্পন্ন করা হয়। JdbcTemplate এর সাহায্যে এই কাজগুলি করা সম্ভব।
এখানে আমরা দুটি প্রধান বিষয় নিয়ে আলোচনা করব:
- Pagination: ডেটাবেসের ডেটা পৃষ্ঠায় ভাগ করে নিয়ে আসা।
- Sorting: ডেটাকে নির্দিষ্ট শর্তে সাজানো।
১. Pagination পরিচালনা (Using LIMIT and OFFSET)
Pagination করার জন্য সাধারণত SQL কুয়েরিতে LIMIT এবং OFFSET ব্যবহার করা হয়, যা একটি নির্দিষ্ট সংখ্যক রেকর্ড ফিরিয়ে আনে এবং পরবর্তী পৃষ্ঠায় যাওয়ার জন্য একটি OFFSET বা "প্রথম রেকর্ডের পজিশন" নির্ধারণ করে। JdbcTemplate এর সাহায্যে Pagination পরিচালনা করা সম্ভব।
উদাহরণ:
ধরা যাক, আমরা Employee টেবিল থেকে পৃষ্ঠা ভিত্তিক ডেটা বের করতে চাই, যেখানে প্রতি পৃষ্ঠায় ৫টি Employee রেকর্ড দেখানো হবে।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.List;
public class EmployeeDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public EmployeeDao(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
}
// Pagination Method
public List<Employee> getEmployeesByPage(int pageNumber, int pageSize) {
String sql = "SELECT * FROM Employee LIMIT :pageSize OFFSET :offset";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("pageSize", pageSize);
parameters.addValue("offset", (pageNumber - 1) * pageSize);
return namedParameterJdbcTemplate.query(sql, parameters, new EmployeeRowMapper());
}
}
এখানে:
LIMIT :pageSize: প্রতি পৃষ্ঠায় কতটি রেকর্ড দেখতে হবে তা নির্ধারণ করে।OFFSET :offset: কোন পৃষ্ঠায় আছি, তার ভিত্তিতে রেকর্ডের শুরু পয়েন্ট নির্ধারণ করে।
EmployeeRowMapper হল একটি কাস্টম RowMapper ক্লাস যা SQL রেকর্ডগুলিকে Employee অবজেক্টে রূপান্তর করবে।
Pagination ব্যবহার:
EmployeeDao employeeDao = new EmployeeDao(namedParameterJdbcTemplate);
// Get page 1 with 5 employees per page
List<Employee> page1 = employeeDao.getEmployeesByPage(1, 5);
// Get page 2 with 5 employees per page
List<Employee> page2 = employeeDao.getEmployeesByPage(2, 5);
২. Sorting পরিচালনা (Using ORDER BY)
Sorting করার জন্য SQL কুয়েরিতে ORDER BY ক্লজ ব্যবহার করা হয়। এটি ডেটাকে একটি নির্দিষ্ট কলামের মানের উপর ভিত্তি করে সাজানোর জন্য ব্যবহৃত হয়। আপনি নির্দিষ্ট কলাম অনুযায়ী ASC (ascending) বা DESC (descending) অর্ডারে ডেটা সাজাতে পারেন।
উদাহরণ:
ধরা যাক, আমরা Employee টেবিলের ডেটাকে name কলামের ভিত্তিতে সাজাতে চাই।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.List;
public class EmployeeDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public EmployeeDao(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
}
// Sorting Method
public List<Employee> getEmployeesSortedByName(String sortOrder) {
String sql = "SELECT * FROM Employee ORDER BY name " + sortOrder;
return namedParameterJdbcTemplate.query(sql, new EmployeeRowMapper());
}
}
এখানে:
ORDER BY name:nameকলামের ভিত্তিতে ডেটা সাজানো হয়।sortOrder: এটি একটি প্যারামিটার যাASCবাDESCহতে পারে, যা বলে দেবে ডেটা ASCENDING বা DESCENDING অর্ডারে সাজানো হবে।
Sorting ব্যবহার:
EmployeeDao employeeDao = new EmployeeDao(namedParameterJdbcTemplate);
// Get employees sorted by name in ascending order
List<Employee> sortedAsc = employeeDao.getEmployeesSortedByName("ASC");
// Get employees sorted by name in descending order
List<Employee> sortedDesc = employeeDao.getEmployeesSortedByName("DESC");
৩. Pagination এবং Sorting একসাথে ব্যবহৃত
এখন ধরুন, আমরা একই সময়ে Pagination এবং Sorting করতে চাই। এটি করতে হলে LIMIT, OFFSET এবং ORDER BY কুয়েরি একসাথে ব্যবহার করতে হবে।
উদাহরণ:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.List;
public class EmployeeDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public EmployeeDao(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
}
// Pagination and Sorting Method
public List<Employee> getEmployeesByPageAndSort(int pageNumber, int pageSize, String sortOrder) {
String sql = "SELECT * FROM Employee ORDER BY name " + sortOrder + " LIMIT :pageSize OFFSET :offset";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("pageSize", pageSize);
parameters.addValue("offset", (pageNumber - 1) * pageSize);
return namedParameterJdbcTemplate.query(sql, parameters, new EmployeeRowMapper());
}
}
এখানে:
ORDER BY name: ডেটাnameকলামের ভিত্তিতে সাজানো হচ্ছে।LIMIT :pageSize OFFSET :offset: Pagination এর জন্যLIMITএবংOFFSETব্যবহার হচ্ছে।
Pagination এবং Sorting একসাথে ব্যবহার:
EmployeeDao employeeDao = new EmployeeDao(namedParameterJdbcTemplate);
// Get page 1, sorted by name in ascending order with 5 employees per page
List<Employee> page1SortedAsc = employeeDao.getEmployeesByPageAndSort(1, 5, "ASC");
// Get page 2, sorted by name in descending order with 5 employees per page
List<Employee> page2SortedDesc = employeeDao.getEmployeesByPageAndSort(2, 5, "DESC");
সারাংশ:
- Pagination এর জন্য
LIMITএবংOFFSETব্যবহার করা হয়, যা SQL কুয়েরির মাধ্যমে ডেটা নির্দিষ্ট পৃষ্ঠায় ভাগ করে আনে। - Sorting এর জন্য
ORDER BYব্যবহার করা হয়, যাতে ডেটা নির্দিষ্ট কলামের ভিত্তিতে ASCENDING বা DESCENDING অর্ডারে সাজানো যায়। - Pagination এবং Sorting একসাথে ব্যবহার করলে, আপনি একটি পৃষ্ঠা ভিত্তিক সাজানো ডেটা পেতে পারেন, যা ইউজার ইন্টারফেসে প্রদর্শনের জন্য উপযুক্ত।
Spring JDBC-এ Pagination এবং Sorting বাস্তবায়ন করা খুবই সাধারণ এবং কার্যকরী। এটি সাধারণত বড় ডেটাবেস থেকে ডেটা লোড করার জন্য ব্যবহৃত হয়, যাতে আপনি প্রয়োজনীয় ডেটা ভিউ করতে পারেন এবং বাকি ডেটা প্রসেস করতে আপনার অ্যাপ্লিকেশনে ভারসাম্য বজায় থাকে। Spring JDBC-তে Pagination এবং Sorting বাস্তবায়ন করতে হলে, সাধারণত SQL কোয়েরি ব্যবহার করা হয়।
Pagination এবং Sorting এর ধারণা
- Pagination: এটি সাধারণত ডেটাবেস থেকে সীমিত পরিমাণ ডেটা রিটার্ন করার জন্য ব্যবহৃত হয়। এতে দুটি মৌলিক ধারণা থাকে:
- Page Size: প্রতি পেজে কতগুলো রেকর্ড শো হবে।
- Page Number: আপনি কোন পেজে আছেন।
- Sorting: এটি ডেটা একটি নির্দিষ্ট অর্ডারে সাজানোর জন্য ব্যবহৃত হয়, যেমন আকার অনুযায়ী (ASC বা DESC), বা নাম অনুযায়ী।
উদাহরণ: Spring JDBC-তে Pagination এবং Sorting
আমরা এখানে একটি উদাহরণ দেখাবো, যেখানে আমরা Spring JDBC ব্যবহার করে একটি টেবিল থেকে ডেটা পেজিনেট এবং সোর্ট করবো।
1. UserRepository.java - Pagination এবং Sorting বাস্তবায়ন
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
@Repository
public class UserRepository {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// Method to fetch users with pagination and sorting
public List<User> getUsers(int pageNumber, int pageSize, String sortBy, String sortOrder) {
// Calculate offset
int offset = (pageNumber - 1) * pageSize;
// Create SQL query with sorting and pagination
String sql = "SELECT * FROM users ORDER BY " + sortBy + " " + sortOrder + " LIMIT :limit OFFSET :offset";
// Set parameters for the query
Map<String, Object> params = new HashMap<>();
params.put("limit", pageSize);
params.put("offset", offset);
// Execute query and return result
return namedParameterJdbcTemplate.query(sql, params, new UserRowMapper());
}
}
এখানে:
pageNumberএবংpageSizeদিয়ে পেজিনেশন কনফিগার করা হয়েছে।sortByএবংsortOrderদিয়ে সোর্টিং কনফিগার করা হয়েছে (যেমন,nameঅনুযায়ী ASC বা DESC)।LIMITএবংOFFSETSQL কোয়েরি ব্যবহার করা হয়েছে, যেখানে:LIMITপরিমাণ ডেটা নির্ধারণ করে (এটি এক পেজের ডেটা সংখ্যা)।OFFSETপেজের শুরুর পজিশন নির্ধারণ করে।
MapSqlParameterSourceঅথবাHashMapব্যবহার করে প্যারামিটারগুলো দেওয়া হয়েছে (যেমনlimit,offsetইত্যাদি)।
2. UserRowMapper.java - RowMapper ক্লাস
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("user_id"));
user.setName(rs.getString("user_name"));
user.setEmail(rs.getString("email"));
user.setAge(rs.getInt("age"));
return user;
}
}
এখানে UserRowMapper একটি ক্লাস যা RowMapper ইন্টারফেসকে ইমপ্লিমেন্ট করে। এটি SQL রেজাল্ট থেকে User অবজেক্ট তৈরি করে।
3. User.java - User ক্লাস
public class User {
private int id;
private String name;
private String email;
private int age;
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
এখানে User একটি পিওজিও ক্লাস, যা আমাদের ডেটাবেসের ইউজার টেবিলের রেকর্ড প্রতিনিধিত্ব করে।
4. Pagination এবং Sorting Call করার উদাহরণ
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void displayUsers(int pageNumber, int pageSize, String sortBy, String sortOrder) {
// Fetch paginated and sorted users
List<User> users = userRepository.getUsers(pageNumber, pageSize, sortBy, sortOrder);
// Display users
for (User user : users) {
System.out.println(user.getId() + " - " + user.getName() + " - " + user.getEmail() + " - " + user.getAge());
}
}
}
এখানে, UserService ক্লাসের মাধ্যমে UserRepository এর getUsers() মেথড কল করা হচ্ছে যেখানে পেজ নম্বর, পেজ সাইজ, সোর্ট ফিল্ড এবং সোর্ট অর্ডার প্যারামিটার হিসেবে পাঠানো হচ্ছে।
5. Controller (Optional)
যদি আপনি এটি ওয়েব অ্যাপ্লিকেশন হিসেবে ব্যবহার করতে চান, তাহলে একটি কন্ট্রোলার তৈরি করতে পারেন, যেখানে প্যারামিটারগুলি HTTP রিকোয়েস্ট থেকে পাঠানো হবে:
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;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public void getUsers(@RequestParam int page, @RequestParam int size,
@RequestParam String sortBy, @RequestParam String sortOrder) {
userService.displayUsers(page, size, sortBy, sortOrder);
}
}
এখানে:
@GetMapping("/users"): HTTP GET রিকোয়েস্টে/usersURL এর জন্য কল হবে।@RequestParam: URL থেকে প্যারামিটার (যেমনpage,size,sortBy,sortOrder) গ্রহণ করা হচ্ছে।
উপসংহার
- Pagination এবং Sorting Spring JDBC-এ সহজেই বাস্তবায়ন করা যায় SQL কোয়েরির মাধ্যমে।
- Pagination-এর জন্য
LIMITএবংOFFSETSQL কোয়েরি ব্যবহার করা হয়, এবং Sorting-এর জন্যORDER BYক্লজ ব্যবহার করা হয়। - Spring JDBC-তে NamedParameterJdbcTemplate ব্যবহার করলে Pagination এবং Sorting এর ক্ষেত্রে কোড আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য হয়।
Read more