Parameter Mapping iBATIS (বর্তমানে MyBatis) এ একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা যা SQL queries এর parameters এবং Java objects এর fields এর মধ্যে সম্পর্ক স্থাপন করে। iBATIS-এর মাধ্যমে ডেটাবেসে SQL কুয়েরি চালানোর সময়, Java objects থেকে ডেটা সরবরাহ করার জন্য parameters প্রদান করা হয়। iBATIS এই parameters এবং SQL query parameters এর মধ্যে ম্যাপিং করে।
Parameter Mapping হল সেই প্রক্রিয়া যা আপনাকে SQL কুয়েরি চালানোর জন্য Java objects-এর মান সরবরাহ করতে সাহায্য করে।
Parameter Mapping কীভাবে কাজ করে?
iBATIS-এ, parameter mapping দ্বারা, আপনি SQL query তে নির্দিষ্ট parameters এর মান সরবরাহ করেন। এই মানগুলি Java objects (বা POJOs) থেকে নেওয়া হয় এবং iBATIS সেই মানগুলি SQL কুয়েরি চলানোর সময় parameterized queries তে ব্যবহার করে। iBATIS SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করতে XML configuration files (যেমন SQLMap.xml) এবং parameterClass বা parameterMap ব্যবহার করে।
1. Parameter Mapping via XML Configuration
iBATIS-এ, SQL কুয়েরি চালানোর জন্য parameters সরবরাহ করতে আপনি parameterClass বা parameterMap ব্যবহার করেন।
Parameter Mapping এর উদাহরণ
ধরা যাক, আপনি একটি Employee টেবিল থেকে কর্মচারীর তথ্য বের করতে চান যেখানে তার salary নির্দিষ্ট একটি মানের বেশি। আপনি iBATIS ব্যবহার করে এই salary এর মান একটি parameter হিসেবে পাঠাতে পারবেন।
Step 1: SQLMap Configuration (SQLMap.xml)
<sqlMap namespace="Employee">
<!-- SQL Query to fetch Employee details based on salary -->
<select id="getEmployeeBySalary" parameterClass="double" resultClass="com.example.Employee">
SELECT id, name, salary
FROM employee
WHERE salary > #salary#
</select>
</sqlMap>
এখানে:
- parameterClass="double": এটি
salaryপ্যারামিটার হিসাবে একটিdoubleটাইপের মান গ্রহণ করবে। - #salary#: এটি iBATIS এর parameter placeholder, যা SQL কুয়েরিতে
salaryপ্যারামিটার ব্যবহার করবে।
Step 2: Java Code to Pass Parameters (Main.java)
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.Reader;
public class Main {
public static void main(String[] args) throws Exception {
// Create SqlMapClient instance
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// Specify salary parameter
double salaryThreshold = 50000;
// Call SQL query and pass the salary parameter
List<Employee> employees = (List<Employee>) sqlMap.queryForList("Employee.getEmployeeBySalary", salaryThreshold);
// Print the employees
for (Employee emp : employees) {
System.out.println("Employee Name: " + emp.getName() + ", Salary: " + emp.getSalary());
}
}
}
এখানে:
queryForList()মেথডে salaryThreshold প্যারামিটার পাস করা হয়েছে, যা SQL কুয়েরি চলানোর জন্য ব্যবহৃত হবে।getEmployeeBySalaryকুয়েরি ID এর মাধ্যমে, salary এর মান পাঠানো হবে এবং employees তালিকায় ফলাফল রিটার্ন করা হবে।
Parameter Mapping এর ভিন্ন ধরন
Positional Parameters (Indexed Parameters): iBATIS-এ positional parameters ব্যবহার করে SQL কুয়েরিতে প্যারামিটার ম্যাপ করা যায়। এগুলো
#param#এর পরিবর্তে?ব্যবহার করে করা হয়, তবে এটি কিছু পুরানো সংস্করণে ব্যবহৃত ছিল।Example (Old-style, positional):
<select id="getEmployeeBySalary" parameterClass="double" resultClass="com.example.Employee"> SELECT id, name, salary FROM employee WHERE salary > ? </select>এখানে:
?প্রতীকটি প্যারামিটার প্লেসহোল্ডার হিসেবে ব্যবহৃত হয় এবংsalaryএর মান ঐ স্থানে পাস করা হয়।
Named Parameters: iBATIS-এ named parameters ব্যবহার করে, আপনি সরাসরি SQL কুয়েরিতে প্যারামিটার নাম উল্লেখ করতে পারেন। এই পদ্ধতিটি পরবর্তী উদাহরণের মতো
#param#সাপোর্ট করে।Example (Named Parameters):
<select id="getEmployeeBySalary" parameterClass="com.example.Employee" resultClass="com.example.Employee"> SELECT id, name, salary FROM employee WHERE salary > #salary# </select>এখানে:
#salary#প্যারামিটারটিEmployeeঅবজেক্ট থেকে salary ফিল্ডের মান গ্রহণ করবে।
Multiple Parameters: iBATIS-এ একাধিক প্যারামিটার পাঠানো সম্ভব, যেটি Java Beans বা Map এর মাধ্যমে করা যেতে পারে। এই ক্ষেত্রে, ডেটাবেস কুয়েরিতে একাধিক প্যারামিটার স্থাপন করা হয়।
Example (Multiple Parameters with Map):
<select id="getEmployeeByNameAndSalary" parameterClass="map" resultClass="com.example.Employee"> SELECT id, name, salary FROM employee WHERE name = #name# AND salary > #salary# </select>Java Code:
Map<String, Object> params = new HashMap<>(); params.put("name", "John Doe"); params.put("salary", 50000); List<Employee> employees = (List<Employee>) sqlMap.queryForList("Employee.getEmployeeByNameAndSalary", params);এখানে:
- Map এর মাধ্যমে একাধিক প্যারামিটার পাঠানো হচ্ছে (যেমন
nameএবংsalary)।
- Map এর মাধ্যমে একাধিক প্যারামিটার পাঠানো হচ্ছে (যেমন
Parameter Mapping এর সুবিধা
- Flexibility:
- Parameter Mapping ডেভেলপারদের SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করার জন্য অত্যন্ত নমনীয়তা প্রদান করে।
- Code Maintainability:
- Named parameters ব্যবহার করে কোড আরও স্বচ্ছ এবং রক্ষণাবেক্ষণযোগ্য হয়। SQL কুয়েরির মধ্যে স্পষ্টভাবে প্যারামিটার নাম উল্লেখ করার ফলে কোডের বোঝাপড়া সহজ হয়।
- Dynamic SQL Generation:
- iBATIS ডেভেলপারদের dynamic SQL তৈরি করার সুযোগ দেয়, যেমন if-else conditions বা loops ব্যবহার করা যেতে পারে।
- Decoupling SQL from Code:
- SQL কুয়েরি এবং Java code এর মধ্যে বিচ্ছিন্নতা সৃষ্টি হয়, যার ফলে SQL কুয়েরি ফাইলগুলো পৃথকভাবে রক্ষণাবেক্ষণ করা যায়।
Parameter Mapping এর অসুবিধা
- Manual SQL Writing:
- iBATIS-এ SQL কুয়েরি ডেভেলপারকেই লিখতে হয়, যা সিস্টেমে জটিল SQL কুয়েরি থাকার ক্ষেত্রে দুরূহ হতে পারে।
- Limited Automation:
- Hibernate বা JPA এর তুলনায় অটোমেটিক mapping এবং SQL কুয়েরি গঠন করা হয় না, তাই আরো বেশি কোড লেখা হয়।
iBATIS (MyBatis) এ Parameter Mapping হল SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপনের একটি গুরুত্বপূর্ণ প্রক্রিয়া। এটি SQL কুয়েরি তে প্যারামিটার পাঠানোর জন্য বিভিন্ন ধরনের ম্যাপিং সমর্থন করে, যেমন named parameters, positional parameters, এবং multiple parameters। iBATIS এর মাধ্যমে, ডেভেলপাররা SQL কুয়েরি এবং প্যারামিটারগুলি সম্পূর্ণভাবে কাস্টমাইজ করতে পারেন, যা তাদের কোডে সম্পূর্ণ নিয়ন্ত্রণ প্রদান করে। iBATIS একটি শক্তিশালী টুল, তবে এতে SQL কুয়েরি লিখতে হয়, যা Hibernate বা JPA-এর তুলনায় কিছুটা বেশি কষ্টসাধ্য হতে পারে।
Read more