iBATIS (MyBatis) হল একটি SQL ম্যাপিং ফ্রেমওয়ার্ক যা Java objects এবং SQL কুয়েরির মধ্যে সম্পর্ক স্থাপন করে। iBATIS একটি ডেটাবেসে সংরক্ষিত Stored Procedures পরিচালনা করতে সহায়ক, এবং এটি Java কোড থেকে SQL Stored Procedures কুয়েরি করতে এবং তাদের আউটপুটে ম্যাপ করতে ব্যবহৃত হতে পারে।
এখানে iBATIS (MyBatis)-এ Complex Stored Procedures হ্যান্ডল করার পদ্ধতি এবং কৌশল আলোচনা করা হবে।
1. Stored Procedures Overview
Stored Procedures হল ডেটাবেসে সংরক্ষিত SQL কোডের সেট যা নির্দিষ্ট কাজ সম্পাদন করতে ব্যবহৃত হয়। এগুলো প্রথামানিত SQL কুয়েরি ও অপারেশনগুলির জন্য আরও দক্ষ এবং পুনঃব্যবহারযোগ্য সমাধান প্রদান করে। MyBatis (iBATIS)-এ, আপনি Stored Procedures কে ডেটাবেসের মধ্যে কার্যকরভাবে কল করতে পারেন এবং তাদের আউটপুট Java objects-এ ম্যাপ করতে পারেন।
2. Calling Stored Procedures from iBATIS (MyBatis)
iBATIS (MyBatis)-এ Stored Procedures কল করার জন্য SQL ম্যাপিং ফাইলে <select>, <insert>, <update>, বা <delete> ট্যাগ ব্যবহার করা যেতে পারে, যা স্টোরড প্রোসিডিউরকে কল করার জন্য #{} প্যারামিটারগুলি ব্যবহার করে।
a) Stored Procedure Calling Using <select> Tag
ধরা যাক, আপনার ডেটাবেসে একটি স্টোরড প্রোসিডিউর রয়েছে যা কিছু students এর তথ্য প্রদান করে। আপনি iBATIS-এ এই প্রোসিডিউরটি কল করতে পারেন।
Example: Stored Procedure Call Using <select> in MyBatis
<select id="getStudentByCourse" statementType="CALLABLE" resultType="com.example.Student">
{CALL GetStudentByCourse(#{course, mode=IN, jdbcType=VARCHAR})}
</select>
Explanation:
statementType="CALLABLE": এটি MyBatis-এ স্টোরড প্রোসিডিউর কল করার জন্য ব্যবহৃত হয়।#{course, mode=IN, jdbcType=VARCHAR}: এটি স্টোরড প্রোসিডিউরের প্যারামিটার।INমোডটি ইঙ্গিত দেয় যে এটি ইনপুট প্যারামিটার হিসেবে ব্যবহৃত হবে এবংjdbcType=VARCHARইঙ্গিত দেয় যে প্যারামিটারটি একটি VARCHAR টাইপ।resultType="com.example.Student": এটি স্টোরড প্রোসিডিউরের আউটপুট Java object-এ ম্যাপ করতে ব্যবহৃত হয়।
3. Handling Output Parameters in Stored Procedures
Stored Procedures সাধারণত আউটপুট প্যারামিটার ফিরিয়ে দেয়, যা INOUT প্যারামিটার হতে পারে। iBATIS (MyBatis)-এ আউটপুট প্যারামিটার হ্যান্ডল করার জন্য, আপনি #{} সিনট্যাক্স ব্যবহার করতে পারেন, এবং আউটপুট প্যারামিটারটি যথাযথভাবে ম্যাপ করতে পারেন।
Example: Stored Procedure with Output Parameter
<select id="getStudentCountByCourse" statementType="CALLABLE" resultType="int">
{CALL GetStudentCountByCourse(#{course, mode=IN, jdbcType=VARCHAR}, #{studentCount, mode=OUT, jdbcType=INTEGER})}
</select>
Explanation:
#{studentCount, mode=OUT, jdbcType=INTEGER}: এটি একটি OUT প্যারামিটার যা স্টোরড প্রোসিডিউর থেকে রিটার্ন হয় এবংjdbcType=INTEGERব্যবহার করা হয় কারণ আউটপুটটি একটি সংখ্যা।
4. Calling Stored Procedures with Multiple Result Sets
บางครั้ง একটি স্টোরড প্রোসিডিউর একাধিক ফলাফল প্রদান করতে পারে। iBATIS (MyBatis)-এ একাধিক ফলাফল সেটের জন্য, আপনি <resultMap> ব্যবহার করতে পারেন, যা একাধিক রেজাল্ট সেট ম্যাপিং করে।
Example: Stored Procedure with Multiple Result Sets
<select id="getStudentAndCourseDetails" statementType="CALLABLE" resultMap="studentCourseMap">
{CALL GetStudentAndCourseDetails(#{course, mode=IN, jdbcType=VARCHAR})}
</select>
<resultMap id="studentCourseMap" type="com.example.Student">
<id property="id" column="student_id"/>
<result property="name" column="student_name"/>
<result property="course" column="course_name"/>
</resultMap>
Explanation:
<resultMap>: এটি একাধিক কলামের মানকে Java objects এর প্রপার্টিতে ম্যাপ করতে ব্যবহৃত হয়।statementType="CALLABLE": এটি ইঙ্গিত দেয় যে SQL কুয়েরি একটি স্টোরড প্রোসিডিউর।
5. Handling Complex Stored Procedures with Multiple Parameters
যখন স্টোরড প্রোসিডিউরে একাধিক ইনপুট প্যারামিটার এবং আউটপুট প্যারামিটার থাকে, তখন আপনি <select>, <insert>, <update>, বা <delete> ট্যাগের মাধ্যমে এই প্যারামিটারগুলি পাস করতে পারেন।
Example: Stored Procedure with Multiple Parameters
<select id="getStudentByNameAndCourse" statementType="CALLABLE" resultType="com.example.Student">
{CALL GetStudentByNameAndCourse(#{name, mode=IN, jdbcType=VARCHAR}, #{course, mode=IN, jdbcType=VARCHAR})}
</select>
Explanation:
- Multiple Parameters: এখানে
nameএবংcourseদুটি ইনপুট প্যারামিটার হিসেবে ব্যবহৃত হচ্ছে, যা স্টোরড প্রোসিডিউরকে পাস করা হবে।
6. Using MyBatis with Stored Procedure in Java Code
এখন, আপনি MyBatis থেকে স্টোরড প্রোসিডিউর কল করার জন্য Java কোড ব্যবহার করতে পারেন। MyBatis-এ SQL ম্যাপিং ফাইলের মাধ্যমে আপনি স্টোরড প্রোসিডিউর কল করবেন, কিন্তু আপনি SqlSession এবং Mapper Interface ব্যবহার করে স্টোরড প্রোসিডিউরটি কল করবেন।
Example: Calling Stored Procedure from Java Code
import org.apache.ibatis.session.SqlSession;
public class StudentDAO {
public int getStudentCountByCourse(String course) {
try (SqlSession session = MyBatisUtil.getSession()) {
// Get the Mapper interface
StudentMapper mapper = session.getMapper(StudentMapper.class);
// Call the stored procedure
return mapper.getStudentCountByCourse(course);
}
}
}
Explanation:
session.getMapper(StudentMapper.class): এটিStudentMapperইন্টারফেসের ইনস্ট্যান্স রিটার্ন করে।mapper.getStudentCountByCourse(course): এটি স্টোরড প্রোসিডিউরকে কল করে এবং আউটপুট প্যারামিটার (যেমনstudentCount) ফিরিয়ে আনে।
7. Handling Transaction with Stored Procedures
MyBatis-এ স্টোরড প্রোসিডিউরের সাথে transaction management হ্যান্ডল করার জন্য, আপনি SqlSession এবং Spring's @Transactional ব্যবহার করতে পারেন। ট্রানজেকশন ম্যানেজমেন্টের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, একাধিক SQL অপারেশন একত্রে সফলভাবে কমিট বা রোলব্যাক হবে।
Example: Using @Transactional with Stored Procedures
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
@Transactional
public void processStudentData(String course) {
studentMapper.insertStudent(new Student("John", course));
studentMapper.getStudentCountByCourse(course);
}
}
Explanation:
@Transactional: এটি Spring ব্যবহারে ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে সবকিছু atomicভাবে একসাথে কমিট বা রোলব্যাক হবে।
iBATIS (MyBatis)-এ Complex Stored Procedures হ্যান্ডল করার জন্য আপনি XML-based mapping files, SQL tags (যেমন <select>, <insert>, <update>, <delete>), এবং annotations ব্যবহার করে স্টোরড প্রোসিডিউর কল করতে পারেন। MyBatis ট্রানজেকশন ম্যানেজমেন্ট, আউটপুট প্যারামিটার হ্যান্ডলিং, এবং একাধিক প্যারামিটার সহ dynamic SQL পরিচালনা করতে সাহায্য করে। আপনার Java কোডে SqlSession এবং Mapper Interface ব্যবহার করে স্টোরড প্রোসিডিউরগুলি কল এবং তাদের ফলাফল পরিচালনা করা যেতে পারে।
Read more