BeanPropertyRowMapper হলো স্প্রিং জেডিবিসি এর একটি সুবিধাজনক ক্লাস, যা SQL ResultSet-এর কলামগুলোকে জাভা অবজেক্টের প্রপার্টি বা ফিল্ডের সাথে অটোম্যাটিক্যালি ম্যাপ করে। এটি RowMapper ইন্টারফেসের একটি ইমপ্লিমেন্টেশন এবং POJO (Plain Old Java Object) ক্লাসের সাথে ডেটা ম্যাপিং সহজ করে তোলে।
BeanPropertyRowMapper কীভাবে কাজ করে?
- কলামের নাম এবং অবজেক্ট প্রপার্টি:
- SQL টেবিলের কলাম নাম এবং POJO এর ফিল্ড নাম একই হলে
BeanPropertyRowMapperএগুলো অটোম্যাটিক্যালি ম্যাপ করে। - যদি কলামের নাম এবং প্রপার্টি নাম ভিন্ন হয়, তবে আপনি SQL query-তে alias ব্যবহার করতে পারেন।
- SQL টেবিলের কলাম নাম এবং POJO এর ফিল্ড নাম একই হলে
- রিফ্লেকশন (Reflection):
- এটি রিফ্লেকশন ব্যবহার করে ResultSet থেকে ডেটা পড়ে এবং POJO ক্লাসের ফিল্ডে সেট করে।
কেন BeanPropertyRowMapper ব্যবহার করবেন?
- ম্যাপিং কোড কমানোর জন্য।
- দ্রুত এবং সহজ ডেটা ম্যাপিং।
- স্ট্যাটিক বা হার্ডকোডেড ম্যাপিং কোড লেখার প্রয়োজন হয় না।
উদাহরণ
১. টেবিল স্ট্রাকচার
ধরা যাক, আপনার একটি employee টেবিল রয়েছে:
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | HR | 50000 |
| 2 | Bob | IT | 60000 |
২. Employee ক্লাস (POJO)
public class Employee {
private int id;
private String name;
private String department;
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 String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
৩. JdbcTemplate এবং BeanPropertyRowMapper ব্যবহার
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class EmployeeDAO {
private JdbcTemplate jdbcTemplate;
// Constructor Injection
public EmployeeDAO(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// Fetch all employees
public List<Employee> getAllEmployees() {
String sql = "SELECT * FROM employee";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));
}
// Fetch employee by ID
public Employee getEmployeeById(int id) {
String sql = "SELECT * FROM employee WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), id);
}
}
কোড বিশ্লেষণ
queryমেথড:jdbcTemplate.query()মেথড মাল্টিপল রেকর্ড রিটার্ন করার জন্য ব্যবহৃত হয়।BeanPropertyRowMapper<>(Employee.class)POJO ক্লাসে ডেটা ম্যাপ করার জন্য ব্যবহৃত হয়।
queryForObjectমেথড:- একক রেকর্ড ফেচ করার জন্য ব্যবহৃত হয়।
- POJO ক্লাসের সাথে একক রেকর্ড ম্যাপ করে।
Alias ব্যবহার করা
যদি টেবিলের কলাম নাম এবং POJO প্রপার্টি নাম ভিন্ন হয়, তবে SQL query-তে AS alias ব্যবহার করতে হবে।
String sql = "SELECT id AS employeeId, name AS employeeName, department AS dept, salary FROM employee";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));
এক্ষেত্রে, আপনার POJO ক্লাসের প্রপার্টি নাম employeeId, employeeName, এবং dept হতে হবে।
BeanPropertyRowMapper এর সুবিধা
- সহজ এবং স্বয়ংক্রিয় ম্যাপিং:
- কম কোড দিয়ে ম্যাপিং সম্পন্ন করা যায়।
- ডেটা প্রসেসিং সহজ:
- অনেক বড় এবং জটিল SQL রেজাল্টসেট সহজেই প্রাসঙ্গিক জাভা অবজেক্টে রূপান্তর করা যায়।
- পুনঃব্যবহারযোগ্যতা:
- একবার POJO এবং SQL কনফিগার করলে বারবার ব্যবহার করা যায়।
সীমাবদ্ধতা
- নাম মিলানো বাধ্যতামূলক:
- টেবিলের কলাম নাম এবং POJO প্রপার্টি নাম অবশ্যই মিলে যেতে হবে, নতুবা alias ব্যবহার করতে হবে।
- কমপ্লেক্স ম্যাপিং:
- জটিল ম্যাপিংয়ের ক্ষেত্রে (যেমন নেস্টেড অবজেক্ট) এটি সীমিত।
উপসংহার
BeanPropertyRowMapper স্প্রিং জেডিবিসি-তে সহজ এবং দ্রুত ডেটা ম্যাপিং এর জন্য একটি কার্যকর উপায়। এটি বয়লারপ্লেট কোড কমিয়ে ডেভেলপমেন্টের সময় এবং জটিলতা উভয়ই হ্রাস করে।
Read more