iBATIS (বর্তমানে MyBatis) একটি ডেটাবেস-অরিয়েন্টেড ফ্রেমওয়ার্ক যা SQL কুয়েরি ব্যবহার করে Java Objects এর সাথে ডেটাবেস ম্যাপ করতে সহায়ক। SQL Map Configuration হল iBATIS/MyBatis কনফিগারেশন ফাইল যা ডেটাবেসের সাথে ইন্টারঅ্যাকশন করতে SQL কুয়েরি এবং ম্যাপিং নির্ধারণ করে।
SQL Map Configuration ফাইলটি একটি গুরুত্বপূর্ণ উপাদান, যেখানে সমস্ত SQL কুয়েরি, ডেটাবেস সংযোগের তথ্য, এবং মাপিং নিয়ম সংরক্ষিত থাকে। এটি XML ফরম্যাটে কনফিগার করা হয় এবং SQL Map এবং Java Beans এর মধ্যে সম্পর্ক স্থাপন করে।
SQL Map Configuration File in iBATIS
Step 1: iBATIS Configuration File (sql-map-config.xml)
iBATIS (বা MyBatis) এর sql-map-config.xml ফাইল হল কনফিগারেশন ফাইল যেখানে ডেটাবেসের সংযোগ এবং SQL ম্যাপিং সম্পর্কিত সমস্ত তথ্য থাকে। এটি SQL Map কনফিগারেশনের কেন্দ্রবিন্দু এবং ডেটাবেস থেকে ডেটা রিট্রিভ করার জন্য যে সমস্ত Mapper XML ফাইল ব্যবহৃত হবে সেগুলোর রেফারেন্সও এতে অন্তর্ভুক্ত করা হয়।
Example: sql-map-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS//DTD SQL Map Configuration 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- Database connection configuration -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/yourdb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
<!-- Transaction Manager -->
<transactionManager type="JDBC"/>
<!-- Include the mapper file(s) -->
<sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>
</sqlMapConfig>
Explanation:
- DataSource: এখানে ডেটাবেস সংযোগের জন্য
dataSourceকনফিগার করা হয়েছে। আপনি ডেটাবেসের ড্রাইভার, URL, ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রদান করেন। - TransactionManager: ট্রানজ্যাকশন ম্যানেজমেন্টের জন্য
transactionManagerকনফিগার করা হয়েছে। এটি ডেটাবেসের ট্রানজ্যাকশন পরিচালনা করতে সাহায্য করে। - Mapper Files:
<sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>দ্বারা EmployeeMapper.xml ফাইলটি কনফিগার করা হয়েছে, যেখানে SQL কুয়েরি এবং ম্যাপিং করা হয়।
Step 2: Mapper XML File (EmployeeMapper.xml)
Mapper XML File হল সেই জায়গা যেখানে SQL Queries এবং Java Beans এর মধ্যে result mapping বা parameter mapping নির্ধারণ করা হয়। এখানে SQL কুয়েরি এবং JavaBeans (যেমন Employee ক্লাস) এর সাথে সম্পর্ক স্থাপন করা হয়।
Example: EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="com.example.mapper.EmployeeMapper">
<!-- Mapping for selecting an employee by ID -->
<select id="getEmployeeById" resultClass="com.example.model.Employee">
SELECT * FROM employees WHERE id = #id#
</select>
<!-- Mapping for inserting a new employee -->
<insert id="insertEmployee" parameterClass="com.example.model.Employee">
INSERT INTO employees (name, salary) VALUES (#name#, #salary#)
</insert>
<!-- Mapping for updating employee salary -->
<update id="updateEmployee" parameterClass="com.example.model.Employee">
UPDATE employees SET salary = #salary# WHERE id = #id#
</update>
<!-- Mapping for deleting an employee -->
<delete id="deleteEmployee" parameterClass="int">
DELETE FROM employees WHERE id = #id#
</delete>
</sqlMap>
Explanation:
<select>:getEmployeeByIdমেথডটি employee ID দিয়ে ডেটাবেস থেকে একটি কর্মচারী তথ্য রিট্রিভ করে।<insert>:insertEmployeeমেথডটি employee অবজেক্টেরnameএবংsalaryভ্যালু ব্যবহার করে ডেটাবেসে নতুন কর্মচারী অ্যাড করে।<update>:updateEmployeeমেথডটি employee অবজেক্টেরidএবংsalaryব্যবহার করে ডেটাবেসে কর্মচারীর স্যালারি আপডেট করে।<delete>:deleteEmployeeমেথডটি employee ID ব্যবহার করে কর্মচারী ডিলিট করে।
Step 3: Java Model Class (Employee.java)
iBATIS কনফিগারেশনের জন্য একটি Java Model Class তৈরি করতে হবে, যেটি ডেটাবেস টেবিলের সাথে সম্পর্কিত ডেটা ধারণ করবে।
Example: Employee.java
package com.example.model;
public class Employee {
private int id;
private String name;
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 double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Explanation:
- Employee ক্লাসটি ডেটাবেসের
employeesটেবিলের জন্য একটি মডেল হিসেবে কাজ করে এবং ডেটাবেসেরid,name,salaryএর মান ধারণ করে।
Step 4: Using iBATIS in Your Application
এখন, iBATIS কনফিগারেশন এবং Mapper XML ফাইল ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন করতে পারবেন। নিচে একটি উদাহরণ দেওয়া হল:
Example: Using iBATIS in Java Application
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Application {
public static void main(String[] args) throws Exception {
// Load iBATIS configuration
String resource = "sql-map-config.xml";
InputStream inputStream = Application.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// Open a session
try (SqlSession session = sqlSessionFactory.openSession()) {
// Retrieve an employee by ID
Employee employee = session.selectOne("com.example.mapper.EmployeeMapper.getEmployeeById", 1);
System.out.println("Employee Name: " + employee.getName());
// Insert a new employee
Employee newEmployee = new Employee();
newEmployee.setName("John Doe");
newEmployee.setSalary(50000);
session.insert("com.example.mapper.EmployeeMapper.insertEmployee", newEmployee);
session.commit(); // Commit the transaction
// Update an existing employee
employee.setSalary(60000);
session.update("com.example.mapper.EmployeeMapper.updateEmployee", employee);
session.commit(); // Commit the transaction
// Delete an employee
session.delete("com.example.mapper.EmployeeMapper.deleteEmployee", 1);
session.commit(); // Commit the transaction
}
}
}
Explanation:
- SqlSessionFactory:
sql-map-config.xmlকনফিগারেশন ফাইলের মাধ্যমে iBATIS কনফিগারেশন লোড করা হচ্ছে। - SqlSession:
openSession()মেথড ব্যবহার করে একটি সেশন ওপেন করা হচ্ছে, এবং সেশন এর মাধ্যমে SQL কুয়েরি রন করা হচ্ছে।
iBATIS (MyBatis) ব্যবহার করে আপনি ডেটাবেস অপারেশন খুবই সহজভাবে করতে পারেন এবং SQL Map Configuration এর মাধ্যমে SQL কুয়েরি ও JavaBeans এর মধ্যে সম্পর্ক স্থাপন করতে পারেন। এটি সাধারণত ডেটাবেস ইন্টারঅ্যাকশন জন্য SQL কুয়েরি এবং Java Objects এর মধ্যে সুনির্দিষ্ট ম্যাপিং নির্ধারণ করতে ব্যবহৃত হয়। SQL Map Configuration ফাইলটি MyBatis কনফিগারেশন ও Mapper XML সংজ্ঞায়িত করতে সাহায্য করে, যা ডেটাবেসের সাথে কার্যকরভাবে কাজ করার জন্য খুবই গুরুত্বপূর্ণ।
iBATIS, বর্তমানে MyBatis নামে পরিচিত, একটি জনপ্রিয় Java ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা ডেটাবেসের সাথে Java objects এর সম্পর্ক তৈরি করতে সাহায্য করে। MyBatis ডেটাবেসের সাথে যোগাযোগ করতে SQL Mapping ব্যবহার করে, অর্থাৎ SQL কোড ম্যানুয়ালি লেখার মাধ্যমে ডেটা অ্যাক্সেস করা হয়।
SQL Map Configuration হল MyBatis এর একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা SQL Queries এবং Java objects এর মধ্যে ম্যাপিং এবং অন্যান্য কনফিগারেশন সেট করে। এটি MyBatis Configuration এবং SQL Mapping ফাইলের মাধ্যমে পরিচালিত হয়, যেখানে SQL কোড এবং তাদের সম্পর্কিত মডেল ক্লাসগুলোর মধ্যে সম্পর্ক স্থাপন করা হয়।
SQL Map Configuration: Definition
SQL Map Configuration হল একটি XML কনফিগারেশন ফাইল যা MyBatis সিস্টেমের কনফিগারেশন সেটিংস ধারণ করে এবং SQL Query গুলি Java objects এর সাথে সংযুক্ত করে। এটি MyBatis এর কার্যকারিতা এবং কাস্টম SQL Mapping সেটআপ করতে সহায়তা করে।
এটি ডেটাবেসের সাথে কাজ করার সময় MyBatis কে SQL স্টেটমেন্ট, ম্যাপিং কনফিগারেশন, ট্রানজেকশন ম্যানেজমেন্ট এবং ডেটাবেস সংযোগের জন্য প্রয়োজনীয় সমস্ত কনফিগারেশন সরবরাহ করে।
SQL Map Configuration এর মূল উদ্দেশ্য
- SQL Statement Configuration:
- SQL Map Configuration এর মাধ্যমে, আপনি SQL কুয়েরি এবং তাদের সাথে সংশ্লিষ্ট Java objects এর মধ্যে সম্পর্ক তৈরি করতে পারেন। এর ফলে, SQL ম্যানিপুলেশন এবং রেজাল্ট ম্যানেজমেন্ট সহজ হয়ে যায়।
- Transaction Management:
- Transaction Configuration ব্যবহার করে SQL Map Configuration ডেটাবেস ট্রানজেকশনের জন্য প্রয়োজনীয় সেটিংস সরবরাহ করে।
- Mapping Java Objects to SQL:
- MyBatis এর মাধ্যমে Java objects (এনটিটি ক্লাস) কে SQL টেবিলের সাথে ম্যাপ করা হয়, এবং SQL Query গুলির ফলাফল Java objects এ রূপান্তর করা হয়।
- DataSource and Database Configuration:
- SQL Map Configuration ফাইলে DataSource, JDBC connection properties, এবং অন্যান্য ডেটাবেস সম্পর্কিত কনফিগারেশন যেমন database dialect সেট করা হয়।
SQL Map Configuration এর স্ট্রাকচার
MyBatis এর SQL Map Configuration সাধারণত একটি XML ফাইলে থাকে। এটির মধ্যে environment, transactionManager, dataSource, এবং mappers সম্পর্কিত তথ্য থাকে।
SQL Map Configuration ফাইলের উদাহরণ (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>
<!-- JDBC Connection Settings -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- MyBatis Mapper Locations -->
<mappers>
<mapper resource="com/example/mapper/EmployeeMapper.xml"/>
</mappers>
</configuration>
Explanation:
- environments: এটি
developmentনামক একটি environment কনফিগার করে, যেখানে ডেটাবেস সংযোগের জন্য transactionManager এবং dataSource কনফিগার করা হয়েছে।- transactionManager:
JDBCট্রানজেকশন ম্যানেজার ব্যবহার করা হয়েছে। - dataSource: POOLED টাইপের ডেটা সোর্স কনফিগার করা হয়েছে, যেখানে ড্রাইভার, ইউআরএল, ইউজারনেম এবং পাসওয়ার্ড দেওয়া হয়েছে।
- transactionManager:
- mappers: এখানে mapper ফাইলগুলির অবস্থান নির্দেশ করা হয়েছে, যেখানে SQL স্টেটমেন্ট এবং তাদের Java মডেল ক্লাসের মধ্যে ম্যাপিং করা হয়।
SQL Map Configuration এর গুরুত্ব
- Centralized Configuration:
- SQL Map Configuration ফাইলটি MyBatis এর সমস্ত কনফিগারেশন এবং SQL statements সংরক্ষণ করে। এটি একটি সেন্ট্রালাইজড পদ্ধতি সরবরাহ করে, যাতে আপনার সমস্ত SQL কোড এবং ডেটাবেস কনফিগারেশন এক জায়গায় থাকে।
- Flexibility in Query Execution:
- SQL Map Configuration ব্যবহার করে, আপনি SQL স্টেটমেন্টগুলির execution পদ্ধতি কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, SQL কুয়েরি স্টেটমেন্টের মধ্যে ডাইনামিক প্যারামিটার যুক্ত করা, বা বিভিন্ন ধরনের ট্রানজেকশন ম্যানেজমেন্ট কৌশল ব্যবহার করা।
- Database Configuration:
- MyBatis-এর DataSource কনফিগারেশন এবং ডেটাবেস সংযোগ সম্পর্কিত অন্যান্য সেটিংস এখানে প্রদান করা হয়, যা ডেটাবেসের সাথে সংযোগ স্থাপন এবং কার্যকরী ডেটাবেস অপারেশন পরিচালনায় সহায়ক।
- Easier Maintenance:
- MyBatis XML কনফিগারেশন ফাইলের মাধ্যমে SQL queries এবং mapping গুলো সম্পূর্ণভাবে এক জায়গায় রাখা যায়, যা কোডের রক্ষণাবেক্ষণ (maintenance) সহজ করে তোলে।
- Loose Coupling:
- SQL Map Configuration এর মাধ্যমে Java কোড এবং SQL কোডের মধ্যে loose coupling তৈরি হয়, কারণ SQL স্টেটমেন্ট এবং Java objects এর মধ্যে সম্পর্ক XML Mapping এর মাধ্যমে করা হয়। এতে কোডের modularity বৃদ্ধি পায়।
- Multiple Environments:
- Multiple environments কনফিগারেশনের সুবিধা প্রদান করা হয়, যা একাধিক ডেটাবেস পরিবেশে (উন্নয়ন, পরীক্ষা, প্রোডাকশন) আলাদা আলাদা কনফিগারেশন এবং ট্রানজেকশন ম্যানেজমেন্ট সরবরাহ করতে সাহায্য করে।
MyBatis SQL Mapping Example
Employee Mapper Interface (EmployeeMapper.java)
package com.example.mapper;
import com.example.model.Employee;
import java.util.List;
public interface EmployeeMapper {
// Get all employees
List<Employee> getAllEmployees();
// Get employee by ID
Employee getEmployeeById(int id);
// Insert employee
void insertEmployee(Employee employee);
// Update employee
void updateEmployee(Employee employee);
// Delete employee by ID
void deleteEmployee(int id);
}
Employee Mapper XML (EmployeeMapper.xml)
<?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.mapper.EmployeeMapper">
<!-- SQL Query to Get All Employees -->
<select id="getAllEmployees" resultType="com.example.model.Employee">
SELECT * FROM Employee
</select>
<!-- SQL Query to Get Employee by ID -->
<select id="getEmployeeById" parameterType="int" resultType="com.example.model.Employee">
SELECT * FROM Employee WHERE id = #{id}
</select>
<!-- SQL Query to Insert Employee -->
<insert id="insertEmployee" parameterType="com.example.model.Employee">
INSERT INTO Employee (name, department, salary)
VALUES (#{name}, #{department}, #{salary})
</insert>
<!-- SQL Query to Update Employee -->
<update id="updateEmployee" parameterType="com.example.model.Employee">
UPDATE Employee SET name = #{name}, department = #{department}, salary = #{salary}
WHERE id = #{id}
</update>
<!-- SQL Query to Delete Employee -->
<delete id="deleteEmployee" parameterType="int">
DELETE FROM Employee WHERE id = #{id}
</delete>
</mapper>
Explanation:
- Mapper Interface:
EmployeeMapperইন্টারফেসের মাধ্যমে CRUD অপারেশনগুলো করা হয়। - XML Mapper: SQL কুয়েরিগুলো
EmployeeMapper.xmlফাইলে লেখা হয়েছে এবং তারা EmployeeMapper ইন্টারফেসের সাথে সম্পর্কিত।
SQL Map Configuration MyBatis এর একটি অপরিহার্য অংশ যা SQL Statements এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করে। এটি JDBC connection settings, transaction management, query configuration, এবং result mappings পরিচালনা করে। SQL Map Configuration ব্যবহার করে আপনি MyBatis এর কার্যকারিতা কাস্টমাইজ করতে পারেন এবং ডেটাবেস সংযোগ এবং SQL ম্যানিপুলেশন সহজে পরিচালনা করতে পারেন।
iBATIS (বর্তমানে MyBatis নামে পরিচিত) একটি ORM ফ্রেমওয়ার্ক যা ডেটাবেসের সাথে সহজে কাজ করতে সাহায্য করে। iBATIS-এ, সমস্ত SQL ম্যানিপুলেশন XML মেপিং ফাইল এ সংজ্ঞায়িত করা হয়, যা sql-map-config.xml এর মাধ্যমে কনফিগার করা হয়।
1. sql-map-config.xml এর ভূমিকা
iBATIS কনফিগারেশন ফাইল sql-map-config.xml একাধিক SQL Map ফাইল (যা প্রতিটি Entity এর জন্য SQL কোড ধারণ করে) এবং ডেটাবেস সংযোগ সম্পর্কিত কনফিগারেশন ধারণ করে। এই ফাইলে MyBatis (বা iBATIS) কনফিগারেশন, ডেটাবেস সংযোগ, মেপার ফাইল ইত্যাদি সেটআপ করা হয়।
sql-map-config.xml ফাইলের মৌলিক কাঠামো:
- DataSource Configuration: ডেটাবেস কানেকশন সম্পর্কিত কনফিগারেশন (যেমন JDBC ড্রাইভার, URL, ইউজারনেম, পাসওয়ার্ড ইত্যাদি)।
- Transaction Configuration: iBATIS এর জন্য ট্রানজেকশন ম্যানেজমেন্ট সেটআপ।
- SQL Map Files: যে ফাইলগুলিতে SQL কুয়েরি এবং মেপিং রয়েছে, তা অন্তর্ভুক্ত করা।
2. sql-map-config.xml কনফিগারেশন উদাহরণ
নিচে একটি sql-map-config.xml ফাইলের উদাহরণ দেওয়া হয়েছে যা একটি সাধারণ iBATIS কনফিগারেশন ফাইল হিসেবে কাজ করবে।
sql-map-config.xml Example:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS//DTD SQL Map Config 3.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-3.dtd">
<sqlMapConfig>
<!-- DataSource Configuration -->
<dataSource type="POOLED">
<property name="driver" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</dataSource>
<!-- Transaction Manager Configuration -->
<transactionManager type="JDBC"/>
<!-- SQL Map Files -->
<sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>
<sqlMap resource="com/example/mapper/DepartmentMapper.xml"/>
</sqlMapConfig>
বিভিন্ন অংশের ব্যাখ্যা:
dataSource: এটি ডেটাবেস সংযোগের জন্য প্রয়োজনীয় কনফিগারেশন ধারণ করে।driver: ডেটাবেসের জন্য ড্রাইভার (এই ক্ষেত্রে H2 ডেটাবেস ব্যবহার করা হয়েছে)।url: ডেটাবেস URL যেখানে ডাটাবেসটি অবস্থান করছে।usernameএবংpassword: ডেটাবেসের সংযোগের জন্য প্রয়োজনীয় ইউজারনেম এবং পাসওয়ার্ড।
transactionManager: iBATIS এর জন্য ট্রানজেকশন ব্যবস্থাপনা কনফিগারেশন। এখানেJDBCট্রানজেকশন ম্যানেজার ব্যবহার করা হয়েছে, তবে আপনিMANAGEDঅথবাSPRINGধরনের ট্রানজেকশন ম্যানেজারও ব্যবহার করতে পারেন, যদি আপনি Spring-এর সাথে iBATIS ইন্টিগ্রেট করেন।sqlMap: এটি SQL ম্যানিপুলেশন ফাইলগুলির রেফারেন্স। এখানেEmployeeMapper.xmlএবংDepartmentMapper.xmlদুটি SQL Mapper ফাইলের রেফারেন্স দেওয়া হয়েছে। প্রতিটি মেপার ফাইল SQL কুয়েরি ধারণ করে এবং এগুলির সাথে জাভা অবজেক্টগুলি মেপ করা হয়।
3. SQL Map File Example (EmployeeMapper.xml)
এখন, আসুন একটি সাধারণ SQL Map ফাইলের উদাহরণ দেখি, যেখানে SQL কুয়েরি এবং তাদের মেপিং যুক্ত করা হয়েছে।
EmployeeMapper.xml Example:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//iBATIS//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/sql-map-3.dtd">
<mapper namespace="com.example.mapper.EmployeeMapper">
<!-- SQL Query to get an employee by ID -->
<select id="getEmployeeById" resultClass="com.example.model.Employee">
SELECT id, name, department
FROM employee
WHERE id = #{id}
</select>
<!-- SQL Query to insert a new employee -->
<insert id="insertEmployee" parameterClass="com.example.model.Employee">
INSERT INTO employee (name, department)
VALUES (#{name}, #{department})
</insert>
</mapper>
ব্যাখ্যা:
<select>:getEmployeeByIdকুয়েরি চালাচ্ছে, যাEmployeeক্লাসের একটি অবজেক্ট রিটার্ন করবে, এবং কুয়েরি প্যারামিটার হিসেবেidব্যবহার করবে।<insert>:insertEmployeeকুয়েরি একটি নতুনEmployeeঅবজেক্ট ইনসার্ট করে।
এখানে namespace হল মেপার ফাইলের নামস্পেস, যা জাভা ক্লাসের সাথে সম্পর্কিত থাকে। resultClass এবং parameterClass ব্যবহার করা হয় SQL কুয়েরির রিটার্ন ও ইনপুট ডেটা মেপ করতে।
4. Java Code to Use iBATIS
এখন, Java কোডের মাধ্যমে sql-map-config.xml কনফিগারেশন এবং EmployeeMapper মেপার ফাইল ব্যবহার করে SQL কুয়েরি চালানো দেখাবো।
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.model.Employee;
public class EmployeeApp {
public static void main(String[] args) {
// Step 1: Build SqlSessionFactory from the configuration file
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
.build(EmployeeApp.class.getResourceAsStream("/sql-map-config.xml"));
// Step 2: Open a session
try (SqlSession session = sessionFactory.openSession()) {
// Step 3: Execute SQL query using the Mapper
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmployeeById(1);
System.out.println("Employee: " + employee);
// Step 4: Insert a new employee
Employee newEmployee = new Employee("Jane Doe", "HR");
mapper.insertEmployee(newEmployee);
session.commit(); // Commit transaction
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে:
SqlSessionFactory:sql-map-config.xmlকনফিগারেশন ফাইল থেকেSqlSessionFactoryতৈরি হচ্ছে।SqlSession: এটি MyBatis এর মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করার জন্য ব্যবহৃত হয়।mapper.getEmployeeById(1)এবংmapper.insertEmployee(newEmployee): MyBatis Mapper ফাইলের মাধ্যমে SQL কুয়েরি চালানো হচ্ছে।
5. Gradle বা Maven দিয়ে প্রোজেক্ট বিল্ড এবং রান করা
Gradle বা Maven ব্যবহার করে আপনার প্রোজেক্ট বিল্ড এবং রান করা যাবে।
For Gradle:
# Build the project
gradle build
# Run the project
gradle run
For Maven:
# Build the project
mvn clean install
# Run the project
mvn exec:java
iBATIS (MyBatis) কনফিগারেশন ফাইল sql-map-config.xml তৈরি করার মাধ্যমে আপনি:
- DataSource Configuration: ডেটাবেস কানেকশন কনফিগার করতে পারেন।
- Transaction Management: ডেটাবেস ট্রানজেকশন পরিচালনা করতে পারেন।
- SQL Map Files: SQL কুয়েরি এবং তাদের মেপিং কনফিগার করতে পারেন।
এই কনফিগারেশন ফাইল এবং MyBatis Mapper ফাইলের মাধ্যমে আপনি সহজেই SQL কোড এবং ডেটাবেস অপারেশনকে Java কোডের সাথে মেপ করতে পারেন। MyBatis বা iBATIS ব্যবহারে SQL কুয়েরি এবং ডেটাবেসের সাথে কাজ করার প্রক্রিয়া সহজ এবং পরিষ্কার হয়।
iBATIS (MyBatis) হল একটি ওপেন সোর্স প্যাকেজ যা Java ডেভেলপারদের জন্য SQL ভিত্তিক পদ্ধতি ব্যবহার করে ডেটাবেসের সাথে অবজেক্ট ম্যাপিং করার জন্য ডিজাইন করা হয়েছে। MyBatis (আগে iBATIS নামে পরিচিত) হল একটি persistence framework যা JDBC-এর সাথে ইন্টিগ্রেট করা যায় এবং এতে ডেভেলপারদের SQL কুয়েরি তৈরি এবং চালানো সহজ করে তোলে। এটি Object-Relational Mapping (ORM) এর তুলনায় কম জটিল এবং বেশি কাস্টমাইজযোগ্য।
এখানে iBATIS/MyBatis এর জন্য Database Connection এবং SQL Map Configuration সেটআপ করার বিস্তারিত উদাহরণ দেওয়া হল।
1. Database Connection Configuration in iBATIS/MyBatis
iBATIS/MyBatis-এর জন্য ডেটাবেস কনফিগারেশন mybatis-config.xml ফাইলের মাধ্যমে করা হয়। এই ফাইলে ডেটাবেস সংযোগের তথ্য যেমন JDBC URL, ইউজারনেম, পাসওয়ার্ড ইত্যাদি নির্ধারণ করা হয়।
Step 1: Add JDBC Driver and MyBatis Dependencies to pom.xml (Maven)
প্রথমে, আপনার Maven প্রজেক্টে mybatis এবং JDBC Driver ডিপেনডেন্সি যোগ করুন।
<dependencies>
<!-- MyBatis Dependency -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MyBatis-Spring Integration Dependency (optional) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- JDBC Driver (e.g., MySQL Connector for MySQL Database) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
Step 2: Create mybatis-config.xml for Database Connection
এটি src/main/resources ফোল্ডারে থাকবে এবং এতে ডেটাবেস কনফিগারেশন থাকবে।
<?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>
<!-- Environment 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_db_name"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<!-- Mapper Files -->
<mappers>
<mapper resource="com/yourpackage/mapper/EmployeeMapper.xml"/>
</mappers>
</configuration>
<transactionManager>: এটি ট্রানজেকশন ম্যানেজার কনফিগারেশন নির্ধারণ করে।<dataSource>: এখানে ডেটাবেসের জন্য ডেটাসোর্স কনফিগার করা হয়, যেমন ড্রাইভার, ইউআরএল, ইউজারনেম এবং পাসওয়ার্ড।<mappers>: এখানে আপনার Mapper XML ফাইলের লিঙ্ক দেওয়া হয়।
Explanation:
- JDBC Configuration: ডেটাবেসের ড্রাইভার, URL, ইউজারনেম এবং পাসওয়ার্ড এই কনফিগারেশনের মধ্যে নির্ধারণ করা হয়।
- POOLED DataSource:
POOLEDটাইপ ব্যবহার করা হচ্ছে, যাতে ডেটাবেস সংযোগ পুলের মাধ্যমে একাধিক সংযোগ ব্যবস্থাপনা করা যায়, যা পারফরম্যান্স উন্নত করে।
2. SQL Map Configuration in MyBatis
MyBatis-এর মূল কার্যকারিতা হল SQL Map Configuration। এখানে আপনি SQL কুয়েরি গুলি লিখবেন যা পরে আপনার Java অবজেক্টের সাথে ম্যাপ হবে। এই কনফিগারেশন সাধারণত Mapper XML ফাইলের মাধ্যমে করা হয়।
Step 1: Create Mapper Interface
MyBatis-এর সাথে ডেটাবেস অপারেশন করার জন্য আপনাকে একটি Mapper Interface তৈরি করতে হবে। এটি EmployeeMapper নামক একটি ইন্টারফেস হতে পারে।
public interface EmployeeMapper {
// SQL Query to fetch employee by ID
Employee getEmployeeById(int id);
// SQL Query to insert a new employee
void insertEmployee(Employee employee);
// SQL Query to update an existing employee
void updateEmployee(Employee employee);
// SQL Query to delete an employee
void deleteEmployee(int id);
}
Step 2: Create Mapper XML File
এখন আপনাকে একটি Mapper XML ফাইল তৈরি করতে হবে, যেখানে আপনি SQL কুয়েরি গুলি লিখবেন। এটি সাধারণত src/main/resources/com/yourpackage/mapper/ ফোল্ডারে রাখা হয়।
<mapper namespace="com.yourpackage.mapper.EmployeeMapper">
<!-- SQL Query to get employee by ID -->
<select id="getEmployeeById" parameterType="int" resultType="Employee">
SELECT * FROM employee WHERE id = #{id}
</select>
<!-- SQL Query to insert an employee -->
<insert id="insertEmployee" parameterType="Employee">
INSERT INTO employee (name, email)
VALUES (#{name}, #{email})
</insert>
<!-- SQL Query to update an employee -->
<update id="updateEmployee" parameterType="Employee">
UPDATE employee
SET name = #{name}, email = #{email}
WHERE id = #{id}
</update>
<!-- SQL Query to delete an employee -->
<delete id="deleteEmployee" parameterType="int">
DELETE FROM employee WHERE id = #{id}
</delete>
</mapper>
<select>: এটি একটি SQL কুয়েরি যা ডেটাবেস থেকেEmployeeরিটার্ন করবে।<insert>: এটি একটি SQL কুয়েরি যা ডেটাবেসে নতুনEmployeeইনসার্ট করবে।<update>: এটি একটি SQL কুয়েরি যা একটিEmployeeআপডেট করবে।<delete>: এটি একটি SQL কুয়েরি যা একটিEmployeeমুছে ফেলবে।
Explanation:
#{}: এখানে#{}সিঙ্কট্যাক্স ব্যবহার করা হচ্ছে যা MyBatis-এর প্যারামিটার প্লেসহোল্ডার হিসেবে কাজ করে, যেগুলি পরে ডাইনামিকভাবে ইনজেক্ট করা হয়।
3. Using MyBatis in Java Code
এখন, আপনাকে SqlSessionFactory তৈরি করতে হবে এবং MyBatis সেশনে লগ ইন করতে হবে। এরপর আপনি Mapper Interface ব্যবহার করে SQL কুয়েরি চালাতে পারবেন।
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.Reader;
public class MyBatisApp {
public static void main(String[] args) {
try {
// Initialize SqlSessionFactory
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// Open a session
try (SqlSession session = sessionFactory.openSession()) {
// Get Mapper interface
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
// Fetch employee by ID
Employee employee = employeeMapper.getEmployeeById(1);
System.out.println(employee.getName());
// Insert a new employee
Employee newEmployee = new Employee("John Doe", "john.doe@example.com");
employeeMapper.insertEmployee(newEmployee);
session.commit(); // Commit the transaction
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
Resources.getResourceAsReader("mybatis-config.xml"): এটি MyBatis কনফিগারেশন ফাইলটি লোড করে।session.getMapper(EmployeeMapper.class): এটিEmployeeMapperইন্টারফেসের মাধ্যমে SQL কুয়েরি চালানোর জন্য সেশন সেটআপ করে।session.commit(): যেহেতু ডেটাবেসে পরিবর্তন হচ্ছে, সুতরাং আপনি commit করবেন যাতে পরিবর্তনগুলি সেভ হয়।
4. Run the Project
- Run the Application: আপনার
MyBatisAppক্লাসটি রান করুন এবং নিশ্চিত করুন যে ডেটাবেসে ডেটা সঠিকভাবে লোড এবং ইনসার্ট হচ্ছে। - Test Queries: SQL কুয়েরিগুলি পরীক্ষা করুন এবং নিশ্চিত করুন যে
EmployeeMapper.xmlফাইলের কুয়েরি সঠিকভাবে কাজ করছে।
iBATIS (MyBatis) ব্যবহারের মাধ্যমে আপনি SQL কুয়েরির মাধ্যমে ডেটাবেস অপারেশন করতে পারেন। Database Connection কনফিগারেশন এবং SQL Map Configuration দুটি প্রধান পদক্ষেপ যেখানে Hibernate-এর তুলনায় MyBatis কিছুটা বেশি কাস্টমাইজেশন প্রদান করে, কারণ আপনি সরাসরি SQL কুয়েরি লিখে কাজ করতে পারেন।
mybatis-config.xmlফাইলে ডেটাবেস কনফিগারেশন করা হয়।- Mapper Interface এবং Mapper XML ফাইলের মাধ্যমে SQL কুয়েরি পরিচালনা করা হয়।
- SqlSessionFactory এর মাধ্যমে ডেটাবেস সেশনে কানেক্ট হয়ে আপনি সহজেই ডেটাবেস অপারেশন করতে পারেন।
এটি MyBatis-এ ডেটাবেস কনফিগারেশন ও SQL ম্যাপিংয়ের জন্য একটি বেসিক গাইডলাইন।
iBATIS (বর্তমানে MyBatis নামে পরিচিত) একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনগুলোকে ডেটাবেসের সাথে সহজে সংযুক্ত করতে সাহায্য করে। iBATIS-এর সাথে ডেটাবেস সংযোগ সঠিকভাবে কনফিগার করার জন্য আপনাকে Environment এবং DataSource কনফিগার করতে হবে। Environment-এর মাধ্যমে আপনি ডেটাবেস পরিবেশ এবং ট্রানজেকশন ম্যানেজার কনফিগার করেন, আর DataSource ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করা হয়।
এখানে, iBATIS Environment এবং DataSource কনফিগার করার বিস্তারিত পদক্ষেপ আলোচনা করা হবে।
1. iBATIS Environment Configuration
iBATIS (MyBatis) এ Environment কনফিগারেশন ডেটাবেসের সাথে সংযোগের জন্য একটি নির্দিষ্ট পরিবেশ সংজ্ঞায়িত করে। এটি Transaction Manager, DataSource, এবং Connection Pooling কনফিগারেশন ধারণ করে।
a) Create mybatis-config.xml for Environment Configuration:
mybatis-config.xml ফাইলে আপনি Environment কনফিগার করতে পারেন, যেখানে ডেটাবেস সংযোগের জন্য DataSource এবং ট্রানজেকশন ম্যানেজার উল্লেখ করা হবে।
<?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">
<!-- Transaction Manager Configuration -->
<transactionManager type="JDBC"/>
<!-- DataSource Configuration -->
<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:
<environments>: এটি ডেটাবেসের সাথে সংযোগের জন্য বিভিন্ন পরিবেশ কনফিগার করতে ব্যবহৃত হয়। এখানেdefault="development"সেট করা হয়েছে, অর্থাৎ "development" পরিবেশের কনফিগারেশনটি ব্যবহার করা হবে।<transactionManager type="JDBC"/>: এখানে JDBC ট্রানজেকশন ম্যানেজার ব্যবহার করা হয়েছে, যা ডেটাবেসে commit এবং rollback অপারেশন পরিচালনা করে।<dataSource type="POOLED">: এটি POOLED টাইপের ডেটাসোর্স নির্দেশ করে, যেখানে কানেকশন পুলিং সক্রিয় থাকে এবং ডেটাবেসে বহু সংযোগ পুনঃব্যবহার করা হয়।
2. iBATIS DataSource Configuration
DataSource কনফিগারেশনটি হল সেই সেটিংস যা ডেটাবেসের সাথে সংযোগ স্থাপনের জন্য ব্যবহৃত হয়। iBATIS এ আপনি সাধারণত POOLED টাইপের DataSource ব্যবহার করেন, যা কানেকশন পুলিং ম্যানেজ করে। এই পদ্ধতির মাধ্যমে একাধিক ডেটাবেস সংযোগ তৈরি করা হয়, এবং একবার ব্যবহৃত হলে সেই কানেকশনটি পুনরায় ব্যবহার করা যায়, যা পারফরম্যান্স উন্নত করে।
Types of DataSource in iBATIS:
- POOLED: ডেটাবেস কানেকশন পুলিং ব্যবহার করে, যেখানে একটি সীমিত সংখ্যা কানেকশন পুনঃব্যবহার করা হয়।
- UNPOOLED: এটি একটি সহজ ডেটাবেস সংযোগ সরবরাহ করে যেখানে কোন কানেকশন পুলিং ব্যবহৃত হয় না।
- JNDI: JNDI (Java Naming and Directory Interface) এর মাধ্যমে ডেটাবেস সংযোগ কনফিগার করা হয়।
a) Pooled DataSource Example:
<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>
type="POOLED": এই ধরনের DataSource কানেকশন পুলিং সক্ষম করে, যা একাধিক কানেকশন পুনঃব্যবহার করতে পারে।property: এখানে ডেটাবেসের URL, username, এবং password উল্লেখ করা হয়েছে।
b) Unpooled DataSource Example:
<dataSource type="UNPOOLED">
<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>
type="UNPOOLED": এই ধরনের DataSource ব্যবহার করলে প্রতিটি ডেটাবেস অপারেশনের জন্য একটি নতুন কানেকশন তৈরি হয়।
c) JNDI DataSource Example:
<dataSource type="JNDI">
<property name="jndiName" value="java:/comp/env/jdbc/MyDataSource"/>
</dataSource>
type="JNDI": যদি আপনি JNDI ব্যবহার করতে চান, তবে এখানে JNDI নাম উল্লেখ করতে হয়, যা আপনার অ্যাপ্লিকেশন সার্ভারে কনফিগার করা থাকবে।
3. Using iBATIS in Java Code
পরিবেশ কনফিগার করার পর, আপনাকে Java কোডে SqlSessionFactory এবং SqlSession তৈরি করতে হবে। এটি ডেটাবেসের সাথে সংযোগ স্থাপন করে এবং SQL ম্যাপিং এর মাধ্যমে অপারেশন সম্পাদন করবে।
Create SqlSessionFactory and SqlSession:
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSession;
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();
}
}
Explanation:
SqlSessionFactory: এটি MyBatis থেকে SQL সেশন তৈরি করার জন্য ব্যবহৃত হয়।Resources.getResourceAsStream("mybatis-config.xml"): এটি mybatis-config.xml কনফিগারেশন ফাইলটি লোড করে।sessionFactory.openSession(): এটি একটি নতুন সেশন তৈরি করে, যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করবে।
4. Sample SQL Mapper for iBATIS
iBATIS এ SQL কুয়েরি এবং ডেটা অপারেশনগুলি mapper XML ফাইলে সংরক্ষিত হয়। এই ফাইলগুলি SQL কুয়েরি এবং Java অবজেক্টের মধ্যে ম্যাপিং কাজ করে।
Example of Mapper XML (StudentMapper.xml):
<?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 for retrieving a Student by ID -->
<select id="selectStudent" resultType="com.example.Student">
SELECT * FROM student WHERE id = #{id}
</select>
<!-- Insert Query for adding a new student -->
<insert id="insertStudent" parameterType="com.example.Student">
INSERT INTO student (name, course) VALUES (#{name}, #{course})
</insert>
<!-- Update Query for updating student details -->
<update id="updateStudent" parameterType="com.example.Student">
UPDATE student SET name = #{name}, course = #{course} WHERE id = #{id}
</update>
<!-- Delete Query for deleting a student -->
<delete id="deleteStudent" parameterType="int">
DELETE FROM student WHERE id = #{id}
</delete>
</mapper>
5. Using the Mapper in Java Code
Java ক্লাসে Mapper Interface তৈরি করতে হবে, যা SQL অপারেশনগুলোকে Java কোডের মাধ্যমে কল করতে সাহায্য করবে।
Example of Mapper Interface:
package com.example.mappers;
import com.example.Student;
public interface StudentMapper {
Student selectStudent(int id);
void insertStudent(Student student);
void updateStudent(Student student);
void deleteStudent(int id);
}
Calling the Mapper from Java Code:
import org.apache.ibatis.session.SqlSession;
public class StudentDAO {
public void saveStudent(Student student) {
try (SqlSession session = MyBatisUtil.getSession()) {
StudentMapper mapper = session.getMapper(StudentMapper.class);
mapper.insertStudent(student);
session.commit();
}
}
public Student getStudentById(int id) {
try (SqlSession session = MyBatisUtil.getSession()) {
StudentMapper mapper = session.getMapper(StudentMapper.class);
return mapper.selectStudent(id);
}
}
}
iBATIS (MyBatis) একটি শক্তিশালী Java persistence framework যা SQL এবং Java objects-এর মধ্যে একটি ম্যাপিং তৈরি করে। Environment এবং DataSource কনফিগার করার মাধ্যমে ডেটাবেস সংযোগ সেটআপ করতে হবে, এবং SQL Mapper ফাইলগুলির মাধ্যমে SQL কোয়েরি পরিচালনা করতে হবে। এই কৌশলগুলি ব্যবহার করে আপনি Hibernate এর তুলনায় আরও কাস্টমাইজড এবং উন্নত পদ্ধতিতে ডেটাবেস অপারেশন পরিচালনা করতে পারবেন।
Read more