iBATIS (বর্তমানে MyBatis নামে পরিচিত) হল একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা SQL এবং Java Objects এর মধ্যে ম্যাপিং (mapping) সহজে করে। এটি Hibernate-এর মতো সম্পূর্ণ ORM ফ্রেমওয়ার্ক না হলেও, এটি SQL কুয়েরি পরিচালনার জন্য একটি সরল এবং কার্যকরী পদ্ধতি প্রদান করে। iBATIS-এ, আপনি SQL কোয়েরি ব্যবহার করেন এবং Java objects এর সাথে তাদের ম্যাপিং করতে পারেন, যার ফলে ডেটাবেস থেকে আসা ফলাফলগুলোকে Java objects-এ রূপান্তরিত করা সহজ হয়।
iBATIS/ MyBatis এ SQL এবং Java Objects এর মধ্যে ম্যাপিং করার জন্য একটি নির্দিষ্ট পদ্ধতি রয়েছে, যার মাধ্যমে আপনি ResultSet কে Java objects-এ কনভার্ট করতে পারবেন। এটি XML-based SQL mapping files এবং annotations ব্যবহার করে করা হয়।
এখানে iBATIS-এ SQL এবং Java Objects এর মধ্যে ম্যাপিং করার বিস্তারিত উদাহরণ দেওয়া হয়েছে।
1. MyBatis/iBATIS Configuration
iBATIS (MyBatis) ব্যবহার করার জন্য প্রথমে কনফিগারেশন করতে হয়, যেমন mybatis-config.xml এবং SQL Mapper XML। এই কনফিগারেশনগুলো ডেটাবেস সংযোগ এবং SQL কুয়েরি অপারেশনগুলো কাস্টমাইজ করে।
a) Create mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- Environments Configuration -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database_name"/>
<property name="username" value="your_database_username"/>
<property name="password" value="your_database_password"/>
</dataSource>
</environment>
</environments>
<!-- Mapper files -->
<mappers>
<mapper resource="com/example/mappers/StudentMapper.xml"/>
</mappers>
</configuration>
Explanation:
<dataSource>: ডেটাবেসের সংযোগ কনফিগারেশন (JDBC URL, ড্রাইভার, ইউজারনেম, পাসওয়ার্ড)।<mappers>: এখানে StudentMapper.xml ফাইলটির রেফারেন্স দেওয়া হয়েছে, যেখানে SQL কুয়েরি এবং Java objects এর মধ্যে ম্যাপিং করা হয়েছে।
2. SQL and Java Object Mapping with MyBatis
MyBatis (iBATIS) ব্যবহার করে SQL কুয়েরি এবং Java objects এর মধ্যে ম্যাপিং করার জন্য Mapper XML ফাইল এবং Java Mapper Interface তৈরি করতে হবে।
a) Create StudentMapper.xml for SQL Mapping:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mappers.StudentMapper">
<!-- Select Query to retrieve student details by ID -->
<select id="selectStudent" resultType="com.example.Student">
SELECT id, name, course FROM student WHERE id = #{id}
</select>
<!-- Insert Query to add a new student -->
<insert id="insertStudent" parameterType="com.example.Student">
INSERT INTO student (name, course) VALUES (#{name}, #{course})
</insert>
<!-- Update Query to update student details -->
<update id="updateStudent" parameterType="com.example.Student">
UPDATE student SET name = #{name}, course = #{course} WHERE id = #{id}
</update>
<!-- Delete Query to remove a student -->
<delete id="deleteStudent" parameterType="int">
DELETE FROM student WHERE id = #{id}
</delete>
</mapper>
Explanation:
<select>: এটি একটি SQL SELECT কুয়েরি যাidএর মাধ্যমে Student অবজেক্টকে রিট্রিভ করে এবংresultTypeএcom.example.Studentক্লাস নির্ধারণ করে, যা SQL ফলাফলকে Student অবজেক্টে ম্যাপ করবে।<insert>,<update>,<delete>: এই কুয়েরিগুলি যথাক্রমে নতুন ছাত্র সেভ, ছাত্রের তথ্য আপডেট, এবং ছাত্র মুছে ফেলতে ব্যবহৃত হয়।
3. Mapper Interface in Java
MyBatis বা iBATIS-এ Mapper Interface ব্যবহার করা হয়, যা XML ফাইলের কুয়েরি স্টেটমেন্টগুলোর সাথে Java কোডের মধ্যে সংযোগ স্থাপন করে।
Example: StudentMapper Interface
package com.example.mappers;
import com.example.Student;
public interface StudentMapper {
// Select student by id
Student selectStudent(int id);
// Insert a new student
void insertStudent(Student student);
// Update student information
void updateStudent(Student student);
// Delete a student by id
void deleteStudent(int id);
}
Explanation:
selectStudent(int id): এটি selectStudent SQL কুয়েরিকে কল করে, যাidদিয়ে Student অবজেক্ট রিট্রিভ করবে।insertStudent(Student student): এটি insertStudent SQL কুয়েরিকে কল করে, যা Student অবজেক্ট ইনসার্ট করবে।updateStudent(Student student): এটি updateStudent SQL কুয়েরিকে কল করে, যা Student অবজেক্ট আপডেট করবে।deleteStudent(int id): এটি deleteStudent SQL কুয়েরিকে কল করে, যাidদ্বারা একটি ছাত্র মুছে ফেলবে।
4. Using MyBatis in Java Code
Java কোডে MyBatis ব্যবহারের জন্য, প্রথমে SqlSessionFactory এবং SqlSession তৈরি করতে হবে, যা SQL কুয়েরি চালানোর জন্য ব্যবহৃত হয়।
Example: Using MyBatis in Java
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;
import java.io.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory sessionFactory;
static {
try {
// Load MyBatis configuration file
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
// Method to get a SqlSession
public static SqlSession getSession() {
return sessionFactory.openSession();
}
}
Using the Mapper Interface:
import org.apache.ibatis.session.SqlSession;
public class StudentDAO {
public Student getStudentById(int id) {
try (SqlSession session = MyBatisUtil.getSession()) {
// Get the mapper instance
StudentMapper mapper = session.getMapper(StudentMapper.class);
// Call the method to retrieve student by id
return mapper.selectStudent(id);
}
}
public void saveStudent(Student student) {
try (SqlSession session = MyBatisUtil.getSession()) {
// Get the mapper instance
StudentMapper mapper = session.getMapper(StudentMapper.class);
// Call the method to insert the student
mapper.insertStudent(student);
// Commit the transaction
session.commit();
}
}
}
Explanation:
getMapper():getMapper()মেথডের মাধ্যমে StudentMapper ইন্টারফেসটি ইনস্ট্যান্স করা হয় এবং SQL কুয়েরি কার্যকর করা হয়।session.commit(): ডেটাবেসে পরিবর্তন সেভ করতে commit() মেথড ব্যবহার করা হয়।
5. Using Annotations for SQL Mapping (Alternative to XML)
iBATIS/MyBatis-এ Annotations ব্যবহার করে SQL কুয়েরি ম্যানেজ করা সম্ভব। এটি XML ফাইলের পরিবর্তে Java কোডে SQL কুয়েরি নির্ধারণ করতে ব্যবহৃত হয়।
Example: Using Annotations for Mapping
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
public interface StudentMapper {
@Select("SELECT * FROM student WHERE id = #{id}")
Student selectStudent(int id);
@Insert("INSERT INTO student (name, course) VALUES (#{name}, #{course})")
void insertStudent(Student student);
}
Explanation:
@Select: SQLSELECTকুয়েরি ব্যবহার করা হয়।@Insert: SQLINSERTকুয়েরি ব্যবহার করা হয়।
iBATIS (MyBatis)-এ SQL এবং Java Objects এর মধ্যে ম্যাপিং করার জন্য Mapper XML ফাইল এবং Java Mapper Interface ব্যবহার করা হয়। আপনি XML-based configuration অথবা Annotations এর মাধ্যমে SQL কুয়েরি পরিচালনা করতে পারেন। MyBatis-এর সাথে SQL কোয়েরি এবং Java objects-এর মধ্যে ম্যাপিং ব্যবস্থাপনা সহজ এবং কাস্টমাইজযোগ্য হয়, কারণ আপনি SQL কুয়েরি সম্পূর্ণরূপে কাস্টমাইজ করতে পারেন এবং Java objects-এ ফলাফল ম্যাপ করতে পারেন।
Read more