iBATIS এ Lazy Loading কনফিগার করা

Lazy Loading এবং Eager Loading - আইবাটিস (iBATIS) - Java Technologies

354

iBATIS (বর্তমানে MyBatis) একটি জনপ্রিয় ORM ফ্রেমওয়ার্ক যা Lazy Loading-এর সমর্থন প্রদান করে, অর্থাৎ একমাত্র তখনই সম্পর্কিত ডেটা লোড হয় যখন তার প্রয়োজন হয়। Lazy Loading কার্যকরভাবে আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে, কারণ শুধুমাত্র প্রয়োজনীয় ডেটা লোড করা হয় এবং অপ্রয়োজনীয় ডেটা লোড করা এড়ানো হয়।

MyBatis-এ Lazy Loading কনফিগার করার জন্য কিছু গুরুত্বপূর্ণ পদক্ষেপ রয়েছে, যা নীচে বিস্তারিতভাবে আলোচনা করা হয়েছে।


Lazy Loading কী?

Lazy Loading এমন একটি কৌশল, যেখানে একাধিক সম্পর্কিত অবজেক্টগুলোকে একযোগে লোড করার পরিবর্তে, শুধুমাত্র তখনই লোড করা হয় যখন সেই সম্পর্কিত অবজেক্টটি অ্যাক্সেস করা হয়। উদাহরণস্বরূপ, যদি আপনার Order এবং Customer নামক দুটি সম্পর্কিত অবজেক্ট থাকে, তবে Order অবজেক্টটি লোড করার সময় Customer অবজেক্টটি লোড করা হবে না যতক্ষণ না আপনি Customer অবজেক্টটি অ্যাক্সেস না করেন।


Lazy Loading কনফিগারেশন MyBatis-এ

MyBatis-এ Lazy Loading কার্যকর করার জন্য lazyLoadingEnabled কনফিগারেশন ব্যবহার করা হয়।

Step 1: mybatis-config.xml ফাইল কনফিগার করা

MyBatis-এ Lazy Loading কনফিগার করার জন্য, প্রথমে 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>

    <!-- Enable Lazy Loading -->
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="lazyLoadTriggerMethods" value="get|is"/>
    </settings>

    <!-- 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 -->
    <transactionManager type="JDBC"/>

    <!-- SQL Map Files -->
    <sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>
    <sqlMap resource="com/example/mapper/DepartmentMapper.xml"/>

</configuration>

Explanation:

  • lazyLoadingEnabled: এটি true সেট করলে Lazy Loading চালু হয়, অর্থাৎ সম্পর্কিত অবজেক্টগুলির জন্য ডেটা তখনই লোড হবে যখন তার প্রয়োজন হবে।
  • lazyLoadTriggerMethods: এই সেটিংটি নির্ধারণ করে কোন মেথডের মাধ্যমে Lazy Loading ট্রিগার হবে। এখানে get এবং is মেথডগুলো দিয়ে Lazy Loading ট্রিগার হবে।

Step 2: MyBatis Mapper XML Configuration

Lazy Loading ব্যবহার করতে, আপনাকে Mapper XML ফাইলের মধ্যে সম্পর্কিত অবজেক্টগুলো কনফিগার করতে হবে।

EmployeeMapper.xml Example (Lazy Loading):

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

    <!-- Employee Select Query -->
    <select id="getEmployeeById" resultType="com.example.model.Employee">
        SELECT id, name, department_id
        FROM employee
        WHERE id = #{id}
    </select>

    <!-- Lazy Loading for Department -->
    <select id="getDepartment" resultType="com.example.model.Department">
        SELECT id, name
        FROM department
        WHERE id = #{id}
    </select>

</mapper>

Explanation:

  • Lazy Loading নিশ্চিত করার জন্য, getDepartment মেথডটি Employee অবজেক্টের মধ্যে Department অবজেক্টের লোডিং এর জন্য ব্যবহৃত হবে।
  • এখানে Employee অবজেক্টের মধ্যে department_id কেবল একটি ফিল্ড হিসেবে থাকবে এবং Department অবজেক্টটি Lazy Loaded হবে।

Step 3: Employee এবং Department Model Classes

এখন, আমাদের Java Model Classes তৈরি করতে হবে, যেখানে Employee ক্লাসের মধ্যে Department সম্পর্কিত ডেটা থাকবে এবং Lazy Loading বাস্তবায়ন হবে।

Employee.java:

public class Employee {
    private int id;
    private String name;
    private Department department;  // Lazy-loaded relationship

    // Getters and Setters
    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    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;
    }
}

Department.java:

public class Department {
    private int id;
    private String name;

    // 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;
    }
}

Step 4: Java Code to Test Lazy Loading

এখন, Java কোড ব্যবহার করে Lazy Loading পরীক্ষা করতে হবে।

Lazy Loading Test - EmployeeApp.java:

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class EmployeeApp {

    public static void main(String[] args) {

        // Step 1: Build SqlSessionFactory from 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: Get Employee by ID, this will lazily load the department
            Employee employee = session.selectOne("com.example.mapper.EmployeeMapper.getEmployeeById", 1);

            // Step 4: Lazy load the department when accessed
            System.out.println("Employee Name: " + employee.getName());
            System.out.println("Department Name: " + employee.getDepartment().getName());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • Lazy Loading: যখন আপনি employee.getDepartment() কল করবেন, তখনই Department অবজেক্টটি লোড হবে।
  • getDepartment() মেথডটি Lazy Loading ট্রিগার করে, কারণ MyBatis-এর কনফিগারেশনে আমরা Lazy Loading এনাবল করেছি।

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

MyBatis (iBATIS) এ Lazy Loading ব্যবহার করার জন্য lazyLoadingEnabled কনফিগারেশন এবং সম্পর্কিত অবজেক্টগুলির জন্য সঠিক কনফিগারেশন প্রয়োজন। Lazy Loading ব্যবহার করলে, আপনি শুধু তখনই সম্পর্কিত অবজেক্টগুলো লোড করবেন যখন সেগুলো অ্যাক্সেস করা হবে, যা অ্যাপ্লিকেশনটির পারফরম্যান্স এবং মেমরি ব্যবস্থাপনা উন্নত করতে সাহায্য করে।

  • lazyLoadingEnabled সেটিংটি কনফিগার করার মাধ্যমে Lazy Loading চালু করা যায়।
  • Mapper XML এবং Java Models এর মাধ্যমে সম্পর্কিত অবজেক্টের Lazy Loading বাস্তবায়ন করা যায়।
Content added By
Promotion

Are you sure to start over?

Loading...