Simple এবং Complex Queries হ্যান্ডল করা

iBATIS এর Basic CRUD Operations - আইবাটিস (iBATIS) - Java Technologies

308

iBATIS (বর্তমানে MyBatis) হল একটি SQL Mapping Framework যা Java objects এবং SQL queries এর মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। iBATIS ব্যবহারে আপনি সহজ এবং জটিল (complex) SQL queries-কে সহজে Java objects-এ ম্যাপ করতে পারেন।

এই গাইডে, আমরা simple queries এবং complex queries হ্যান্ডল করার জন্য iBATIS/MyBatis এর বিভিন্ন কৌশল ও টেকনিক শিখব।


1. Simple Queries in iBATIS

Simple queries সাধারণত খুবই সোজা, যেখানে এক বা দুইটি কলাম বা শর্তে ডেটা অনুসন্ধান করা হয়। iBATIS এর মাধ্যমে select, insert, update, এবং delete এই ধরনের queries খুব সহজে হ্যান্ডল করা যায়।

Simple Select Query Example:

ধরা যাক আমাদের একটি Employee টেবিল আছে এবং আমরা Employee এর সমস্ত তথ্য সংগ্রহ করতে চাই।

Employee Class (Java Object):
public class Employee {
    private int id;
    private String name;
    private String department;

    // Getters and Setters
}
Simple Select Query in XML:
<select id="getAllEmployees" resultType="Employee">
    SELECT id, name, department FROM employee
</select>
Explanation:
  • resultType="Employee": এটি SQL query এর ফলাফলকে Employee object এর সাথে ম্যাপ করতে নির্দেশ দেয়।
  • এখানে SELECT query টেবিলের সমস্ত employee তথ্য নিবে এবং Employee object এ ম্যাপ হবে।
Using the Query in Java:
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    List<Employee> employees = sqlSession.selectList("getAllEmployees");
    for (Employee employee : employees) {
        System.out.println(employee.getName());
    }
} finally {
    sqlSession.close();
}
Explanation:
  • selectList() মেথডে "getAllEmployees" query টি চালানো হয়েছে এবং Employee তালিকা ফিরিয়ে আনা হয়েছে।

2. Complex Queries in iBATIS

Complex queries সাধারণত একাধিক joins, subqueries, grouping, এবং conditions (where, order by, etc.) সহ থাকে। iBATIS এ এই ধরনের queries ব্যবহার করতে dynamic SQL তৈরি করা সম্ভব, যার মাধ্যমে condition অনুযায়ী SQL queries তৈরি করা যায়।

Complex Select Query Example:

ধরা যাক, আমাদের একটি Department টেবিল রয়েছে এবং আমরা একটি complex query চালাতে চাই, যা Employee এবং Department টেবিলের মধ্যে JOIN করবে।

Employee and Department Classes (Java Objects):
public class Employee {
    private int id;
    private String name;
    private String department;
    private int departmentId;

    // Getters and Setters
}

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

    // Getters and Setters
}
Complex Join Query in XML:
<select id="getEmployeesByDepartment" resultMap="employeeDepartmentResultMap">
    SELECT e.id AS employee_id, e.name AS employee_name, e.department_id, d.name AS department_name
    FROM employee e
    JOIN department d ON e.department_id = d.id
    WHERE d.name = #{departmentName}
</select>

<resultMap id="employeeDepartmentResultMap" type="Employee">
    <result property="id" column="employee_id"/>
    <result property="name" column="employee_name"/>
    <result property="department" column="department_name"/>
</resultMap>
Explanation:
  • JOIN: Employee এবং Department টেবিলের মধ্যে department_id দ্বারা সম্পর্ক স্থাপন করা হয়েছে।
  • WHERE: departmentName নামক প্যারামিটার ব্যবহার করা হয়েছে যা parameterized query হিসেবে ইনপুট দেওয়া হবে।
  • resultMap: SQL query এর ফলাফলকে Employee object এবং তার Department নামের সাথে ম্যাপ করা হয়েছে।
Using the Complex Query in Java:
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    Map<String, String> params = new HashMap<>();
    params.put("departmentName", "IT");

    List<Employee> employees = sqlSession.selectList("getEmployeesByDepartment", params);
    for (Employee employee : employees) {
        System.out.println(employee.getName() + " - " + employee.getDepartment());
    }
} finally {
    sqlSession.close();
}
Explanation:
  • selectList(): এই মেথডের মাধ্যমে Employee তালিকা পাওয়া যাবে যেখানে IT বিভাগের কর্মীরা উপস্থিত থাকবে।
  • params.put("departmentName", "IT"): প্যারামিটার হিসেবে departmentName প্রদান করা হয়েছে।

3. Dynamic SQL in iBATIS

iBATIS (MyBatis) এ dynamic SQL তৈরি করা যেতে পারে, যাতে SQL কোড conditionally পরিবর্তিত হয়। if, choose, where, trim, foreach ইত্যাদি ট্যাগ ব্যবহার করে SQL query গুলি ডাইনামিক করা যায়।

Dynamic SQL Example:

ধরা যাক, আমরা এমন একটি SQL query তৈরি করতে চাই যেখানে Employee এর বিভিন্ন শর্তের উপর ভিত্তি করে where clause যুক্ত হবে। ব্যবহারকারী চাইলে departmentId এবং salary এর উপর ভিত্তি করে filtering করতে পারে।

Dynamic SQL in XML:
<select id="getEmployeesByCriteria" resultMap="employeeResultMap">
    SELECT id, name, department_id, salary
    FROM employee
    <where>
        <if test="departmentId != null">
            AND department_id = #{departmentId}
        </if>
        <if test="salary != null">
            AND salary > #{salary}
        </if>
    </where>
</select>
Explanation:
  • <where>: where ট্যাগটি ব্যবহৃত হয়েছে যেটি if ট্যাগগুলির মাধ্যমে কন্ডিশনাল শর্তযুক্ত SQL তৈরি করে।
  • <if>: এখানে departmentId এবং salary এর উপর ভিত্তি করে if conditions দেওয়া হয়েছে, যেগুলি parameterized queries হিসেবে ইনপুট দেওয়া হয়।
Using Dynamic SQL in Java:
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    Map<String, Object> params = new HashMap<>();
    params.put("departmentId", 2); // Providing a departmentId
    params.put("salary", 50000);   // Providing a minimum salary

    List<Employee> employees = sqlSession.selectList("getEmployeesByCriteria", params);
    for (Employee employee : employees) {
        System.out.println(employee.getName());
    }
} finally {
    sqlSession.close();
}
Explanation:
  • params.put(): departmentId এবং salary প্যারামিটার হিসেবে প্রদান করা হয়েছে।
  • selectList(): এই মেথডের মাধ্যমে filter করা Employee তালিকা পাওয়া যাবে যেখানে শর্ত অনুযায়ী departmentId এবং salary ফিল্টার হবে।

4. Using ParameterMap in Complex Queries

iBATIS/MyBatis-এ parameterized queries ব্যবহারের জন্য ParameterMap ব্যবহার করা যেতে পারে। এটি SQL query-এ প্যারামিটার ইনপুট করার একটি সুবিধাজনক উপায়।

Using ParameterMap Example:

<parameterMap id="employeeParamMap" type="Employee">
    <parameter property="departmentId" jdbcType="INTEGER"/>
    <parameter property="salary" jdbcType="DECIMAL"/>
</parameterMap>

<select id="getEmployeeByCriteria" resultMap="employeeResultMap" parameterMap="employeeParamMap">
    SELECT id, name, department_id, salary
    FROM employee
    WHERE department_id = #{departmentId} AND salary > #{salary}
</select>
Explanation:
  • parameterMap: এখানে employeeParamMap ব্যবহার করা হয়েছে, যেখানে departmentId এবং salary প্যারামিটার গুলি ম্যাপ করা হয়েছে।
  • **parameterMap এর মাধ্যমে SQL query তে Java objects এর প্যারামিটার ইনজেক্ট করা হয়েছে।

  • Simple Queries iBATIS (MyBatis)-এ খুবই সহজে SQL queries লিখে Java objects-এ result set ম্যাপ করা যায়। আপনি select, insert, update, delete query গুলি সহজেই তৈরি করতে পারেন।
  • Complex Queries iBATIS (MyBatis)-এ JOIN, WHERE, GROUP BY, ORDER BY সহ আরও জটিল SQL কোডগুলিকে dynamic SQL এর মাধ্যমে কাস্টমাইজ করতে পারেন। <if>, <choose>, <foreach> ট্যাগগুলির মাধ্যমে SQL queries আরও কার্যকরী করা যায়।
  • Dynamic SQL এর সাহায্যে where ক্লজে কন্ডিশনাল ফিল্টার তৈরি করতে এবং parameterized queries ব্যবহার করতে সহজ হয়।
Content added By
Promotion

Are you sure to start over?

Loading...