iBATIS (বর্তমানে MyBatis) একটি SQL mapping framework, যা SQL queries এবং Java objects এর মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয়। iBATIS ব্যবহারকারীদেরকে SQL results এবং parameters mapping করতে ResultMap এবং ParameterMap সরবরাহ করে, যা complex SQL queries এবং তাদের result set গুলি সহজভাবে Java objects এ ম্যাপ করতে সাহায্য করে।
1. ResultMap in iBATIS/MyBatis
ResultMap একটি iBATIS/MyBatis-এর অন্যতম গুরুত্বপূর্ণ ফিচার যা SQL query results কে Java objects-এর সাথে সম্পর্কিত করে। ResultMap এর মাধ্যমে আপনি SQL result set কে Java objects-এ ম্যাপ করার জন্য কাস্টমাইজেশন করতে পারেন। এটি ব্যবহৃত হয় যখন column names এবং Java object field names একে অপরের সাথে মিলে না বা যখন one-to-one বা one-to-many সম্পর্ক থাকে।
ResultMap এর কাজ:
- ResultMap SQL query এর result set কে Java object এর প্রপার্টি গুলির সাথে ম্যাপ করে।
- আপনি result column names এবং Java object field names এর মধ্যে সম্পর্ক তৈরি করতে পারেন।
Example of ResultMap:
ধরা যাক আমাদের একটি Employee এবং Department entity আছে, যেখানে Employee এর department_id Department এর id কলামের সাথে সম্পর্কিত।
Employee Class (Java Object):
public class Employee {
private int id;
private String name;
private String departmentName;
private int departmentId;
// Getters and Setters
}
Department Class (Java Object):
public class Department {
private int id;
private String name;
// Getters and Setters
}
ResultMap XML Configuration:
<resultMap id="employeeResultMap" type="Employee">
<result property="id" column="employee_id"/>
<result property="name" column="employee_name"/>
<result property="departmentName" column="department_name"/>
<result property="departmentId" column="department_id"/>
</resultMap>
<select id="getEmployeeById" resultMap="employeeResultMap">
SELECT employee_id, employee_name, department_name, department_id
FROM employee
WHERE employee_id = #{id}
</select>
Explanation:
<resultMap>: এটি SQL result set-কে Java object এর সাথে ম্যাপ করে।<result>: প্রতিটি কলাম থেকে প্রাপ্ত মানকে Java object field এর সাথে ম্যাপ করা হয়।column: SQL query থেকে প্রাপ্ত কলাম নাম।property: Java object এর field name।resultMap: এটি employeeResultMap ব্যবহার করে query result গুলিকে Employee object-এ ম্যাপ করবে।
2. ParameterMap in iBATIS/MyBatis
ParameterMap হল iBATIS/MyBatis-এর একটি ফিচার যা SQL queries তে ব্যবহৃত প্যারামিটারগুলির জন্য একটি কাস্টম ম্যাপিং তৈরি করতে ব্যবহৃত হয়। ParameterMap ব্যবহার করে আপনি SQL কোডে parameters কে named parameters বা positional parameters হিসাবে মান দিয়ে মানানসই করতে পারেন।
ParameterMap এর কাজ:
- ParameterMap SQL query তে প্যারামিটার যুক্ত করতে ব্যবহৃত হয়, যাতে Java objects-এর ফিল্ডগুলি SQL query তে সরাসরি ইনজেক্ট করা যায়।
- এটি একাধিক প্যারামিটার সহ SQL query গুলি কাস্টমাইজ করতে সহায়ক।
Example of ParameterMap:
ধরা যাক, আমাদের একটি Employee এর তথ্য অনুসন্ধান করতে হবে যার departmentId এবং salary এর উপর ভিত্তি করে।
ParameterMap XML Configuration:
<parameterMap id="employeeParamMap" type="Employee">
<parameter property="departmentId" jdbcType="INTEGER"/>
<parameter property="salary" jdbcType="DECIMAL"/>
</parameterMap>
<select id="getEmployeeByDepartmentAndSalary" resultMap="employeeResultMap" parameterMap="employeeParamMap">
SELECT employee_id, employee_name, department_name, department_id
FROM employee
WHERE department_id = #{departmentId} AND salary > #{salary}
</select>
Explanation:
<parameterMap>: এটি প্যারামিটার ম্যানেজ করার জন্য ব্যবহৃত হয় এবং SQL query তে parameters ইনজেক্ট করার জন্য একে Java object field এর সাথে ম্যাপ করা হয়।property: Java object-এর field যা SQL query তে প্যারামিটার হিসাবে ব্যবহৃত হবে।jdbcType: SQL query তে প্যারামিটারটির জন্য JDBC টাইপ নির্ধারণ করা হয়।parameterMap: employeeParamMap প্যারামিটার ম্যাপ ব্যবহার করা হয়েছে যেখানে Employee object-এর departmentId এবং salary প্যারামিটার হিসাবে SQL query তে ব্যবহৃত হবে।
3. Dynamic SQL Generation
iBATIS/MyBatis-এ dynamic SQL জেনারেট করার জন্য if, choose, where, trim, foreach ট্যাগ ব্যবহার করা যেতে পারে। এটি আপনাকে SQL query কাস্টমাইজ করার এবং প্যারামিটার গুলিকে ডাইনামিকভাবে যোগ বা বাদ দেওয়ার সুবিধা প্রদান করে।
Dynamic SQL Example:
<select id="getEmployeesByCriteria" resultMap="employeeResultMap">
SELECT employee_id, employee_name, department_name, department_id
FROM employee
<where>
<if test="departmentId != null">
AND department_id = #{departmentId}
</if>
<if test="salary != null">
AND salary > #{salary}
</if>
</where>
</select>
Explanation:
<if>: এটি SQL query তে একটি শর্তযুক্ত অংশ যোগ করতে ব্যবহৃত হয়। এখানে,departmentIdএবংsalaryপ্যারামিটারগুলির মানের উপর ভিত্তি করে শর্ত যোগ করা হয়েছে।
4. Benefits of Using ResultMap and ParameterMap
ResultMap Benefits:
- Custom Mapping: SQL result set এবং Java object fields এর মধ্যে কাস্টম ম্যানুয়াল ম্যাপিং করা যায়, যা complex results বা nested results ম্যাপিং করার সময় খুবই কার্যকরী।
- Relationship Mapping: One-to-many, many-to-many সম্পর্কগুলির মধ্যে সম্পর্ক স্থাপন এবং related entities এর ম্যাপিং করা সহজ।
- SQL and Java Separation: SQL queries এবং Java objects এর মধ্যে স্পষ্ট আলাদা করে, কোড পরিষ্কার এবং maintainable হয়।
ParameterMap Benefits:
- Parameter Reusability: একই প্যারামিটার মান ব্যবহার করে বিভিন্ন SQL queries এর জন্য পুনঃব্যবহারযোগ্য parameter maps তৈরি করা যায়।
- SQL Query Customization: SQL queries তে dynamic parameters বা conditional parameters যোগ করা যায়, যা flexibility প্রদান করে।
- ResultMap এবং ParameterMap হল iBATIS/MyBatis-এ SQL mapping এবং parameter handling এর জন্য গুরুত্বপূর্ণ টুল। ResultMap ব্যবহারের মাধ্যমে আপনি SQL query এর ফলাফলকে Java objects এর সাথে কাস্টমাইজ করে ম্যাপ করতে পারেন, এবং ParameterMap এর মাধ্যমে SQL query তে parameters ম্যানেজ করা সহজ হয়।
- Dynamic SQL generation, relationship mapping, এবং custom query handling এই দুটি ম্যাপিং টুল ব্যবহার করে অনেক সহজ হয়ে যায়।
Read more