iBATIS (এখন MyBatis নামে পরিচিত) হল একটি SQL mapping framework যা Java objects এবং SQL queries এর মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। iBATIS এর মাধ্যমে SQL queries এবং Java objects এর মধ্যে ডেটা পাস করার জন্য, আপনি simple parameters (যেমন int, String, float, ইত্যাদি) এবং complex parameters (যেমন Java object বা collection) ব্যবহার করতে পারেন।
এখানে, iBATIS এ simple এবং complex parameters কিভাবে ব্যবহৃত হয়, তার বিস্তারিত আলোচনা করা হলো।
1. Simple Parameters
Simple parameters হল সেই ধরনের ডেটা টাইপ যা সরাসরি SQL কুয়েরি প্যারামিটার হিসেবে পাস করা যায়। যেমন:
- Primitive types (
int,long,float,double,boolean) - String
- Date types
iBATIS-এ, আপনি #parameter# সিনট্যাক্স ব্যবহার করে simple parameters SQL কুয়েরিতে পাস করতে পারেন।
Simple Parameters Example:
ধরা যাক, আমাদের একটি User entity রয়েছে এবং আমরা একটি ব্যবহারকারীকে ID দিয়ে খুঁজে বের করতে চাই।
1. SQL Mapping File (User.xml):
<sqlMap namespace="User">
<!-- Simple Parameter: Select a user by ID -->
<select id="getUserById" parameterClass="int" resultClass="User">
SELECT id, name, email FROM users WHERE id = #id#
</select>
<!-- Simple Parameter: Get users by name -->
<select id="getUsersByName" parameterClass="String" resultClass="User">
SELECT id, name, email FROM users WHERE name = #name#
</select>
</sqlMap>
ব্যাখ্যা:
- getUserById: এখানে
#id#একটি simple parameter যা SQL কুয়েরি প্যারামিটার হিসেবে পাস করা হচ্ছে। - getUsersByName: এখানে
#name#একটি String parameter হিসেবে ব্যবহার করা হচ্ছে।
2. Java Code (Main.java):
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) {
// Create SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Main.class.getResourceAsStream("/SqlMapConfig.xml"));
try (SqlSession session = sqlSessionFactory.openSession()) {
// Simple Parameter: Get a user by ID
User user = session.selectOne("User.getUserById", 1);
System.out.println("User Retrieved: " + user.getName());
// Simple Parameter: Get users by name
User userByName = session.selectOne("User.getUsersByName", "John Doe");
System.out.println("User Retrieved: " + userByName.getName());
}
}
}
ব্যাখ্যা:
session.selectOne("User.getUserById", 1)- এখানে1একটি simple parameter হিসাবে SQL কুয়েরিতে পাস করা হয়েছে।session.selectOne("User.getUsersByName", "John Doe")- এখানে"John Doe"একটি String parameter হিসাবে SQL কুয়েরিতে পাস করা হয়েছে।
2. Complex Parameters
Complex parameters হল সেই ধরনের ডেটা যা Java objects বা collection এর মাধ্যমে SQL কুয়েরিতে পাস করা হয়। এর মধ্যে POJOs (Plain Old Java Objects), Maps, এবং Collections (যেমন List, Set, বা Map) অন্তর্ভুক্ত থাকতে পারে। iBATIS আপনাকে complex parameters SQL কুয়েরিতে পাস করার জন্য parameterClass এর মাধ্যমে Java objects এবং collections কে SQL query parameters হিসেবে ব্যবহার করার সুবিধা প্রদান করে।
Complex Parameters Example:
ধরা যাক, আমাদের একটি User entity রয়েছে এবং আমরা ব্যবহারকারীর name এবং email এর মাধ্যমে অনুসন্ধান করতে চাই।
1. SQL Mapping File (User.xml):
<sqlMap namespace="User">
<!-- Complex Parameter: Get user by name and email -->
<select id="getUserByNameAndEmail" parameterClass="map" resultClass="User">
SELECT id, name, email FROM users WHERE name = #name# AND email = #email#
</select>
<!-- Complex Parameter: Get users by multiple names -->
<select id="getUsersByNames" parameterClass="java.util.List" resultClass="User">
SELECT id, name, email FROM users WHERE name IN
<foreach item="name" collection="list" open="(" separator="," close=")">
#name#
</foreach>
</select>
</sqlMap>
ব্যাখ্যা:
- getUserByNameAndEmail: এখানে,
parameterClass="map"দিয়ে Map ব্যবহার করা হয়েছে যা name এবং email এর মান ধারণ করবে এবং SQL কুয়েরি প্যারামিটার হিসেবে পাস করবে। - getUsersByNames: এখানে,
parameterClass="java.util.List"দিয়ে List ব্যবহার করা হয়েছে, যা IN কুয়েরি দিয়ে একাধিক নামের জন্য অনুসন্ধান করবে।foreachট্যাগটি ব্যবহার করে, একাধিক নামের জন্য SQL তৈরি করা হয়।
2. Java Code (Main.java):
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.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// Create SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Main.class.getResourceAsStream("/SqlMapConfig.xml"));
try (SqlSession session = sqlSessionFactory.openSession()) {
// Complex Parameter: Get a user by name and email
Map<String, String> params = new HashMap<>();
params.put("name", "John Doe");
params.put("email", "john.doe@example.com");
User user = session.selectOne("User.getUserByNameAndEmail", params);
System.out.println("User Retrieved: " + user.getName());
// Complex Parameter: Get users by multiple names
List<String> names = List.of("John Doe", "Jane Smith");
List<User> users = session.selectList("User.getUsersByNames", names);
users.forEach(u -> System.out.println("User: " + u.getName()));
}
}
}
ব্যাখ্যা:
Map<String, String> params = new HashMap<>(): এখানে একটি Map ব্যবহার করা হয়েছে যেখানে name এবং email প্যারামিটার দেওয়া হয়েছে এবং SQL কুয়েরিতে পাস করা হয়েছে।session.selectOne("User.getUserByNameAndEmail", params)-paramscomplex parameter হিসাবে ব্যবহার করা হয়েছে।List<String> names = List.of("John Doe", "Jane Smith");- এখানে একটি List ব্যবহার করা হয়েছে, যা একাধিক নামের জন্য SQL কুয়েরি তৈরি করতে সহায়তা করছে।
3. Using Complex Parameters with Collections
iBATIS-এ আপনি collections যেমন List, Set, বা Map ব্যবহার করে batch queries বা IN queries করতে পারেন। এটি বিশেষভাবে উপকারী যখন আপনি একাধিক প্যারামিটার পাস করতে চান বা একাধিক রেকর্ড নিয়ে কাজ করতে চান।
Example: Using foreach with Complex Parameters
<select id="getUsersByIds" parameterClass="java.util.List" resultClass="User">
SELECT id, name, email FROM users WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#id#
</foreach>
</select>
Java Code:
List<Integer> ids = Arrays.asList(1, 2, 3, 4);
List<User> users = session.selectList("User.getUsersByIds", ids);
ব্যাখ্যা:
- এখানে
foreachট্যাগ ব্যবহার করা হয়েছে যাতেList<Integer>এর মধ্যে থাকা IDs এর জন্য IN কুয়েরি তৈরি করা যায়।
iBATIS (MyBatis) এর মাধ্যমে simple এবং complex parameters ব্যবহার করে SQL queries এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করা খুবই সহজ। Simple parameters (যেমন int, String, ইত্যাদি) SQL কুয়েরি প্যারামিটার হিসেবে সরাসরি ব্যবহার করা যায়, এবং complex parameters (যেমন Java objects, Map, List) ব্যবহার করে আপনি আরও জটিল এবং ডাইনামিক SQL কুয়েরি তৈরি করতে পারেন।
iBATIS এর মাধ্যমে, আপনি parameterized queries ব্যবহার করে SQL কোডে SQL injection থেকে রক্ষা পেতে পারেন এবং ডেটাবেস অপারেশনগুলিকে আরও কার্যকরভাবে পরিচালনা করতে পারেন।
Read more