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 এর ক্ষেত্রে কোড আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য হয়।