Association Mapping iBATIS (বর্তমানে MyBatis) একটি গুরুত্বপূর্ণ ফিচার যা Java objects এবং relational database tables এর মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Association Mapping এর মাধ্যমে আপনি one-to-one, one-to-many, বা many-to-many সম্পর্ক তৈরি করতে পারেন, যেখানে Java objects এর মধ্যে সম্পর্ক (association) ডেটাবেস টেবিলের মধ্যে ম্যাপ করা হয়।
iBATIS মূলত SQL-based ORM (Object-Relational Mapping) এবং এতে আপনি SQL কুয়েরি ও XML configuration files ব্যবহার করে objects এবং তাদের সম্পর্ক ম্যাপ করেন। iBATIS এ association mapping হল সম্পর্কিত অবজেক্টগুলির মধ্যে সম্পর্ক স্থাপন করার প্রক্রিয়া, যেখানে এক টেবিলের ডেটা অন্য টেবিলের সাথে সম্পর্কিত থাকে।
Association Mapping-এর প্রকারভেদ
iBATIS এ Association Mapping এর ৩টি প্রধান প্রকার রয়েছে:
- One-to-One Mapping
- One-to-Many Mapping
- Many-to-Many Mapping
1. One-to-One Mapping
One-to-One mapping সম্পর্কের মধ্যে দুটি entity একে অপরের সাথে একে একে সম্পর্কিত থাকে। একে অপরকে উল্লেখ করতে SQL JOIN ব্যবহার করা হয়। অর্থাৎ, একটি entity একটি ইনস্ট্যান্সের সাথে অন্য একটি entity এর একক ইনস্ট্যান্সের সাথে সম্পর্ক রাখে।
Example: One-to-One Mapping (Employee and Passport)
Employee.java
@Entity
public class Employee {
@Id
private int id;
private String name;
// One-to-one association with Passport
private Passport passport;
// Getters and Setters
}
Passport.java
@Entity
public class Passport {
@Id
private int id;
private String passportNumber;
// Getters and Setters
}
SQLMap Configuration (SQLMap.xml)
<sqlMap namespace="Employee">
<!-- One-to-one mapping of Employee and Passport -->
<resultMap id="employeeResultMap" class="Employee">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!-- Employee has a passport -->
<association property="passport" resultMap="passportResultMap"/>
</resultMap>
<resultMap id="passportResultMap" class="Passport">
<result property="id" column="passport_id"/>
<result property="passportNumber" column="passport_number"/>
</resultMap>
<!-- Query to fetch employee details with passport -->
<select id="getEmployeeById" resultMap="employeeResultMap">
SELECT e.id, e.name, p.passport_id, p.passport_number
FROM employee e
LEFT JOIN passport p ON e.passport_id = p.passport_id
WHERE e.id = #id#
</select>
</sqlMap>
এখানে:
- One-to-One Association: একটি Employee একটি Passport রাখে। SQL কুয়েরিতে
LEFT JOINব্যবহার করে দুইটি টেবিলের ডেটা একত্রিত করা হয়েছে। - Association:
Employeeক্লাসেpassportপ্রপার্টি ব্যবহার করে Passport এর সাথে সম্পর্ক স্থাপন করা হয়েছে।
2. One-to-Many Mapping
One-to-Many mapping সম্পর্কের মধ্যে একটি entity একাধিক সম্পর্কিত entity এর সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একজন Department এর অনেক Employee থাকতে পারে। একে একাধিক সম্পর্কের জন্য SQL queries তৈরি করতে হয়, যেখানে একটি entity এর রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
Example: One-to-Many Mapping (Department and Employee)
Department.java
@Entity
public class Department {
@Id
private int id;
private String name;
// One-to-many relationship with Employee
private List<Employee> employees;
// Getters and Setters
}
Employee.java
@Entity
public class Employee {
@Id
private int id;
private String name;
private int departmentId;
// Getters and Setters
}
SQLMap Configuration (SQLMap.xml)
<sqlMap namespace="Department">
<!-- One-to-many association between Department and Employees -->
<resultMap id="departmentResultMap" class="Department">
<result property="id" column="department_id"/>
<result property="name" column="department_name"/>
<!-- Department has multiple employees -->
<collection property="employees" ofType="Employee" resultMap="employeeResultMap"/>
</resultMap>
<resultMap id="employeeResultMap" class="Employee">
<result property="id" column="employee_id"/>
<result property="name" column="employee_name"/>
</resultMap>
<!-- Query to fetch a department with employees -->
<select id="getDepartmentWithEmployees" resultMap="departmentResultMap">
SELECT d.department_id, d.department_name, e.employee_id, e.employee_name
FROM department d
LEFT JOIN employee e ON d.department_id = e.department_id
WHERE d.department_id = #id#
</select>
</sqlMap>
এখানে:
- One-to-Many Association: একটি Department এর একাধিক Employee রয়েছে। SQL কুয়েরিতে
LEFT JOINব্যবহার করে ডিপার্টমেন্টের সাথে কর্মচারীদের তথ্যও একত্রিত করা হয়েছে। - Collection:
Departmentক্লাসেemployeesপ্রপার্টি দিয়ে List প্রকারের মান ধারণ করা হয়েছে, যা একাধিক কর্মচারীকে ধারণ করবে।
3. Many-to-Many Mapping
Many-to-Many mapping সম্পর্কের মধ্যে দুটি entity একে অপরের সাথে অনেক সম্পর্কিত থাকে। উদাহরণস্বরূপ, Student এবং Course এর মধ্যে সম্পর্ক, যেখানে একাধিক ছাত্র একাধিক কোর্সে ভর্তি হতে পারে এবং একাধিক কোর্সে একাধিক ছাত্র থাকতে পারে।
Example: Many-to-Many Mapping (Student and Course)
Student.java
@Entity
public class Student {
@Id
private int id;
private String name;
// Many-to-many relationship with Course
private List<Course> courses;
// Getters and Setters
}
Course.java
@Entity
public class Course {
@Id
private int id;
private String name;
// Many-to-many relationship with Student
private List<Student> students;
// Getters and Setters
}
SQLMap Configuration (SQLMap.xml)
<sqlMap namespace="Student">
<!-- Many-to-many association between Student and Courses -->
<resultMap id="studentResultMap" class="Student">
<result property="id" column="student_id"/>
<result property="name" column="student_name"/>
<!-- Student has multiple courses -->
<collection property="courses" ofType="Course" resultMap="courseResultMap"/>
</resultMap>
<resultMap id="courseResultMap" class="Course">
<result property="id" column="course_id"/>
<result property="name" column="course_name"/>
</resultMap>
<!-- Query to fetch a student with courses -->
<select id="getStudentWithCourses" resultMap="studentResultMap">
SELECT s.student_id, s.student_name, c.course_id, c.course_name
FROM student s
LEFT JOIN student_courses sc ON s.student_id = sc.student_id
LEFT JOIN course c ON sc.course_id = c.course_id
WHERE s.student_id = #id#
</select>
</sqlMap>
এখানে:
- Many-to-Many Association: একটি Student একাধিক Course তে ভর্তি হতে পারে এবং প্রতিটি Course তে একাধিক Student থাকতে পারে।
- Collection:
Studentক্লাসেcoursesপ্রপার্টি দিয়ে List ব্যবহার করা হয়েছে, যা অনেক কোর্স ধারণ করবে।
iBATIS (MyBatis) - Association Mapping এর সুবিধা
| ফিচার | বিবরণ |
|---|---|
| SQL-centric | iBATIS SQL কুয়েরি ব্যবহার করে সম্পর্ক স্থাপন এবং ডেটা অ্যাক্সেস করা হয়। |
| Easy to Customize | SQL কুয়েরি লিখে সম্পর্ক এবং ডেটা ম্যানিপুলেশন সম্পূর্ণভাবে কাস্টমাইজ করা যায়। |
| Supports Complex Relationships | One-to-one, One-to-many, এবং Many-to-many সম্পর্ক সহজে ম্যাপ করা যায়। |
| Improved Data Integrity | SQL কুয়েরি ও সম্পর্কের মাধ্যমে ডেটা একত্রিত করে ডেটাবেসের মধ্যে ডেটা সঠিকভাবে বজায় রাখা যায়। |
iBATIS (MyBatis) এ Association Mapping হল একটি শক্তিশালী টুল যা SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে। One-to-One, One-to-Many, এবং Many-to-Many সম্পর্কগুলি iBATIS এর মাধ্যমে নির্দিষ্ট করা যায়, এবং এতে SQL কুয়েরি এবং Java beans এর মধ্যে ম্যাপিং সহজে কাস্টমাইজ করা যায়। iBATIS এর এই ফিচারগুলি আপনার ডেটাবেস ম্যানিপুলেশন এবং সম্পর্কিত ডেটার অ্যাক্সেসের পদ্ধতিকে আরও কার্যকরী এবং নমনীয় করে তোলে।
Read more