iBATIS (বর্তমানে MyBatis) একটি ORM ফ্রেমওয়ার্ক যা ডেটাবেসের সাথে SQL কুয়েরি এবং স্টোরড প্রোসিজারগুলি চালানোর জন্য ব্যবহৃত হয়। স্টোরড প্রোসিজার (Stored Procedure) হল ডেটাবেসে সংরক্ষিত SQL কোডের একটি সেট যা নির্দিষ্ট কাজ সম্পন্ন করতে ব্যবহৃত হয়। iBATIS বা MyBatis এর মাধ্যমে স্টোরড প্রোসিজার কল করার পদ্ধতি সহজ এবং কার্যকর।
MyBatis-এ স্টোরড প্রোসিজার কল করতে, আপনাকে SQL মেপিং ফাইলে call স্টেটমেন্ট ব্যবহার করতে হবে এবং SqlSession বা SqlMapper এর মাধ্যমে জাভা কোড থেকে ওই প্রোসিজার কল করতে হবে।
Step 1: Stored Procedure তৈরি করা
প্রথমে, একটি সাধারণ স্টোরড প্রোসিজার তৈরি করা যাক। ধরুন আমাদের একটি Employee টেবিল আছে, এবং আমরা একটি স্টোরড প্রোসিজার তৈরি করব যা একটি কর্মচারীকে ইনসার্ট করবে এবং ইনসার্ট হওয়া কর্মচারীর আইডি রিটার্ন করবে।
Example Stored Procedure in MySQL:
DELIMITER
DELIMITER ;
এটি একটি স্টোরড প্রোসিজার যা কর্মচারী নাম এবং বিভাগ ইনপুট হিসেবে নেয় এবং নতুন কর্মচারী তৈরি করে এবং তার ID আউটপুট হিসেবে রিটার্ন করে।
Step 2: MyBatis Configuration (sql-map-config.xml)
আমাদের sql-map-config.xml কনফিগারেশন ফাইল সেটআপ করতে হবে, যাতে ডেটাবেস সংযোগ এবং স্টোরড প্রোসিজার ব্যবহার করা যায়।
<?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="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
<!-- Transaction Manager Configuration -->
<transactionManager type="JDBC"/>
<!-- Mapper Files -->
<sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>
</sqlMapConfig>
এখানে:
dataSource: MySQL ডেটাবেসের জন্য ড্রাইভার, URL, ইউজারনেম এবং পাসওয়ার্ড কনফিগার করা হয়েছে।transactionManager:JDBCভিত্তিক ট্রানজেকশন ম্যানেজার ব্যবহার করা হয়েছে।
Step 3: MyBatis Mapper XML (EmployeeMapper.xml)
এখন, আমাদের EmployeeMapper.xml ফাইলে স্টোরড প্রোসিজার কল করার কুয়েরি সংজ্ঞায়িত করতে হবে।
EmployeeMapper.xml Example (for Stored Procedure Call):
<?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">
<!-- Call the Stored Procedure to insert an employee -->
<select id="insertEmployee" statementType="CALLABLE" parameterClass="map" resultClass="int">
{CALL insertEmployee(
#{employeeName, mode=IN, jdbcType=VARCHAR},
#{employeeDept, mode=IN, jdbcType=VARCHAR},
#{employeeId, mode=OUT, jdbcType=INTEGER}
)}
</select>
</mapper>
Explanation:
statementType="CALLABLE": এটি MyBatis কে জানায় যে এই কুয়েরি একটি স্টোরড প্রোসিজার কল করছে।parameterClass="map":Mapপ্যারামিটার হিসেবে পাঠানো হবে যাতে স্টোরড প্রোসিজার ইনপুট প্যারামিটার এবং আউটপুট প্যারামিটার মান পাঠানো যায়।#{parameterName, mode=IN/OUT, jdbcType=XXX}: এখানেIN,OUT, এবংjdbcTypeব্যবহার করে MyBatis কে স্টোরড প্রোসিজারের প্যারামিটার সম্পর্কে নির্দেশ দেওয়া হয়।
Step 4: Java Code to Call Stored Procedure
এখন, আমরা Java কোডে MyBatis ব্যবহার করে স্টোরড প্রোসিজার কল করব।
EmployeeApp.java Example (Calling the Stored Procedure):
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.HashMap;
import java.util.Map;
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 SqlSession
try (SqlSession session = sessionFactory.openSession()) {
// Step 3: Prepare parameters for the stored procedure
Map<String, Object> parameters = new HashMap<>();
parameters.put("employeeName", "John Doe");
parameters.put("employeeDept", "IT");
// Step 4: Execute the stored procedure to insert employee and get employeeId
session.selectOne("com.example.mapper.EmployeeMapper.insertEmployee", parameters);
// Step 5: Retrieve the employeeId from the parameters map
Integer employeeId = (Integer) parameters.get("employeeId");
System.out.println("Inserted Employee ID: " + employeeId);
// Commit transaction
session.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
parameters.put("employeeName", "John Doe"): প্যারামিটার হিসেবে কর্মচারীর নাম এবং বিভাগ সেট করা হচ্ছে।session.selectOne("com.example.mapper.EmployeeMapper.insertEmployee", parameters): এখানেinsertEmployeeমেথড কল করা হচ্ছে যা স্টোরড প্রোসিজার কল করবে। প্যারামিটার হিসেবেparametersম্যাপ ব্যবহার করা হচ্ছে।parameters.get("employeeId"): স্টোরড প্রোসিজার থেকে রিটার্ন হওয়াemployeeIdআউটপুট প্যারামিটার থেকে নেওয়া হচ্ছে।
Step 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) এর মাধ্যমে Stored Procedures কল করা একটি সহজ প্রক্রিয়া যা ডেটাবেস অপারেশনকে আরও কার্যকরী এবং দক্ষ করে তোলে। আপনি CALLABLE স্টেটমেন্ট ব্যবহার করে SQL কুয়েরি এবং স্টোরড প্রোসিজার প্যারামিটার ম্যানেজ করতে পারেন। এখানে কিছু গুরুত্বপূর্ণ পদ্ধতি:
statementType="CALLABLE": MyBatis-কে জানায় যে এটি একটি স্টোরড প্রোসিজার কল হচ্ছে।Mapপ্যারামিটার: ইনপুট এবং আউটপুট প্যারামিটারগুলিকে একটিMapএ পাঠানো হয়।
এটি আপনাকে iBATIS বা MyBatis ব্যবহার করে স্টোরড প্রোসিজার কল করার জন্য একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে।
Read more