Stored Procedure কি এবং কিভাবে কাজ করে?

iBATIS এর সাথে Stored Procedures - আইবাটিস (iBATIS) - Java Technologies

503

iBATIS (বর্তমানে MyBatis নামে পরিচিত) একটি SQL Mapping Framework যা ডেটাবেসের সাথে Java objects এর সম্পর্ক তৈরি করে এবং SQL স্টেটমেন্টগুলির মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করে। Stored Procedure হল একটি প্রি-কম্পাইলড SQL কোডের ব্লক যা ডেটাবেসের মধ্যে সংরক্ষিত থাকে এবং বিভিন্ন ডেটাবেস অপারেশন সম্পাদন করার জন্য ব্যবহার করা হয়। Stored Procedure সাধারণত INSERT, UPDATE, DELETE, SELECT ইত্যাদি SQL অপারেশন করতে পারে এবং এটি ডেটাবেসে প্রসেসিং করতে ব্যবহার হয়।

MyBatis (iBATIS) তে, আপনি Stored Procedures ব্যবহার করতে পারেন এবং SQL Mapping এর মাধ্যমে Java কোডের সাথে তাদের একত্রিত করতে পারেন। এখানে আলোচনা করা হবে Stored Procedure কী এবং MyBatis-এ এটি কিভাবে কাজ করে।


Stored Procedure: Definition

Stored Procedure হল একটি SQL কোডের গ্রুপ যা ডেটাবেসে সংরক্ষিত থাকে এবং ডেটাবেস অ্যাপ্লিকেশন থেকে বার বার ব্যবহার করা যায়। এটি একটি প্রি-কংফিগারড SQL অপারেশন যা ডেটাবেস সার্ভারে রান করা হয়, ফলে সার্ভারের মাধ্যমে reusable, performant, এবং modular SQL কোড তৈরি করা যায়।

Stored Procedure এর মূল সুবিধা:

  1. Code Reusability: একবার কোড লিখে সেটি বার বার ব্যবহার করা যায়।
  2. Performance: Precompiled SQL কোড ডেটাবেসে রান হয়, যা অনেক দ্রুত হতে পারে।
  3. Security: SQL কোড ডেটাবেস সার্ভারে থাকে, ফলে ক্লায়েন্ট অ্যাপ্লিকেশনটি ডেটাবেস কোডের সাথে সরাসরি ইন্টারঅ্যাক্ট করে না, যা সিকিউরিটি বাড়ায়।

Stored Procedure কিভাবে কাজ করে MyBatis (iBATIS) এ

MyBatis-এ Stored Procedures ব্যবহার করতে হলে, আপনাকে XML Mapper ফাইল এবং Mapper Interface তৈরি করতে হবে, যেখানে আপনি Stored Procedure এর জন্য SQL কোড এবং প্যারামিটার পাস করতে পারবেন। MyBatis SQL Mapping এর মাধ্যমে আপনি stored procedures চালাতে পারেন এবং সেই অনুযায়ী রেজাল্ট ম্যাপ করতে পারেন।


Step 1: Stored Procedure in MySQL Example

ধরা যাক, আমাদের একটি Employee টেবিল আছে এবং একটি stored procedure রয়েছে যেটি একটি কর্মচারীর তথ্য আপডেট করতে ব্যবহৃত হবে।

Stored Procedure Definition (MySQL):

DELIMITER CREATEPROCEDUREupdateemployeesalary(INempidINT,INnewsalaryDECIMAL(10,2))BEGINUPDATEEmployeeSETsalary=newsalaryWHEREid=empid;END

CREATE PROCEDURE update_employee_salary(
    IN emp_id INT,
    IN new_salary DECIMAL(10,2)
)
BEGIN
    UPDATE Employee
    SET salary = new_salary
    WHERE id = emp_id;
END

DELIMITER ;

এই stored procedure টি emp_id এবং new_salary ইনপুট প্যারামিটার হিসাবে গ্রহণ করে এবং উল্লিখিত কর্মচারীর salary আপডেট করে।


Step 2: MyBatis Configuration for Stored Procedure

mybatis-config.xml Example:

MyBatis কনফিগারেশন ফাইলের মধ্যে ডেটাবেস সংযোগ এবং mapper ফাইলের অবস্থান নির্ধারণ করা হয়।

<?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 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>

    <mappers>
        <mapper resource="com/example/mapper/EmployeeMapper.xml"/>
    </mappers>

</configuration>

Explanation:

  • environments: ডেটাবেস সংযোগ কনফিগারেশন এবং transactionManager কনফিগার করা হয়েছে।
  • mappers: এখানে EmployeeMapper.xml ফাইলের অবস্থান নির্ধারণ করা হয়েছে, যেখানে SQL স্টেটমেন্ট এবং stored procedure কনফিগারেশন করা হবে।

Step 3: Mapper XML for Stored Procedure

MyBatis XML Mapper ফাইলে আপনি Stored Procedure কল এবং প্যারামিটার পাস করতে পারেন।

EmployeeMapper.xml Example:

<?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">

    <!-- Stored Procedure to Update Employee Salary -->
    <update id="updateEmployeeSalary">
        { CALL update_employee_salary(#{emp_id, mode=IN}, #{new_salary, mode=IN}) }
    </update>

</mapper>

Explanation:

  • : id="updateEmployeeSalary" স্টোরড প্রোসিডিউর কল করার জন্য ব্যবহার করা হয়েছে। এটি CALL SQL স্টেটমেন্ট ব্যবহার করে, যা MySQL তে স্টোরড প্রোসিডিউর চালানোর জন্য ব্যবহৃত হয়।
  • #{emp_id, mode=IN}: emp_id এবং new_salary ইনপুট প্যারামিটার হিসেবে স্টোরড প্রোসিডিউরে পাস করা হয়। mode=IN মানে, এটি একটি ইনপুট প্যারামিটার।

Step 4: Mapper Interface

MyBatis এ Mapper Interface ব্যবহার করে আপনি স্টোরড প্রোসিডিউর চালাতে পারেন এবং SQL ফলাফল অর্জন করতে পারেন।

EmployeeMapper Interface:

package com.example.mapper;

import org.apache.ibatis.annotations.Param;

public interface EmployeeMapper {
    // Call Stored Procedure to Update Employee Salary
    void updateEmployeeSalary(@Param("emp_id") int empId, @Param("new_salary") double newSalary);
}

Explanation:

  • @Param Annotation: @Param("emp_id") এবং @Param("new_salary") এর মাধ্যমে প্যারামিটার নাম নির্ধারণ করা হয়। এই অ্যানোটেশন ব্যবহার করা হয় যাতে XML Mapper ফাইলে প্যারামিটার মান পাস করা যায়।

Step 5: Main Code to Call Stored Procedure

এখন, আপনি Stored Procedure কল করতে এবং EmployeeMapper ইন্টারফেস ব্যবহার করতে পারবেন।

Main.java:

package com.example;

import com.example.mapper.EmployeeMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) {
        // MyBatis configuration and session factory setup
        String resource = "mybatis-config.xml";
        InputStream inputStream = Main.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // Open session
        try (SqlSession session = sqlSessionFactory.openSession()) {
            EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
            
            // Call the stored procedure to update employee salary
            employeeMapper.updateEmployeeSalary(1, 75000.0);  // Example: Update salary of employee with ID = 1

            session.commit();  // Commit the transaction
        }
    }
}

Explanation:

  • updateEmployeeSalary method: এটি EmployeeMapper ইন্টারফেসের মাধ্যমে স্টোরড প্রোসিডিউর কল করে, এবং কর্মচারীর salary আপডেট করে।
  • session.commit(): SQL অপারেশন সম্পন্ন হওয়ার পর ট্রানজেকশন কমিট করা হয়।

Stored Procedure in MyBatis: Best Practices

  1. Exception Handling:
    • স্টোরড প্রোসিডিউর কল করার সময় যে কোনো ত্রুটি ঘটলে তা হ্যান্ডেল করতে হবে। MyBatis তে try-catch ব্লক ব্যবহার করে exception হ্যান্ডলিং করা উচিত।
  2. Proper Transaction Management:
    • স্টোরড প্রোসিডিউর সাধারণত একাধিক ডেটাবেস অপারেশন সম্পন্ন করে, তাই transaction management খুবই গুরুত্বপূর্ণ। MyBatis-এ ট্রানজেকশন ম্যানেজমেন্ট কনফিগারেশন এবং commit/rollback ব্যবহারে মনোযোগ দিন।
  3. Optimize Stored Procedures:
    • স্টোরড প্রোসিডিউরগুলি ডেটাবেস সার্ভারে একাধিক অপারেশন একসাথে সম্পাদন করার জন্য ব্যবহার করা হয়। সুতরাং, স্টোরড প্রোসিডিউরগুলি সঠিকভাবে অপটিমাইজ করা উচিত যাতে পারফরম্যান্স ইস্যু না হয়।
  4. Use of Parameterized Queries:
    • স্টোরড প্রোসিডিউরগুলিতে ইনপুট প্যারামিটারগুলি সঠিকভাবে ব্যবহৃত হলে SQL ইনজেকশন থেকে রক্ষা পাওয়া যায়। MyBatis এ parameterized queries ব্যবহার করলে এটি সুরক্ষিত থাকে।

MyBatis (iBATIS) তে Stored Procedures ব্যবহার একটি শক্তিশালী পদ্ধতি যা ডেটাবেস অপারেশনগুলিকে দ্রুত এবং কার্যকরীভাবে সম্পন্ন করতে সাহায্য করে। MyBatis এর মাধ্যমে, আপনি SQL স্টেটমেন্টগুলি তৈরি করতে পারেন এবং XML Mapper এবং Mapper Interface ব্যবহার করে stored procedure কল করতে পারেন। এর মাধ্যমে আপনি modular, performant, এবং secure ডেটাবেস অপারেশন সম্পাদন করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...