Hibernate Criteria API: ধারণা এবং প্রয়োজনীয়তা
Hibernate Criteria API হল Hibernate এর একটি API যা আপনাকে SQL কুয়েরি লেখার পরিবর্তে Java কোড দিয়ে ডেটাবেস কুয়েরি তৈরি করতে সক্ষম করে। এটি object-oriented উপায়ে কুয়েরি তৈরি করার জন্য একটি শক্তিশালী এবং টাইপ-সেফ পদ্ধতি প্রদান করে, যা আপনাকে কোডের মধ্যে ডাইনামিক এবং লজিক্যাল কুয়েরি তৈরি করতে সহায়তা করে।
Hibernate Criteria API, Hibernate Query Language (HQL) এবং JPA Criteria API এর একটি বিকল্প হিসেবে কাজ করে। এটি সাধারণত complex, dynamic, এবং প্যারামিটারাইজড কুয়েরি তৈরি করতে ব্যবহৃত হয়, যেখানে traditional SQL বা HQL কোডের পরিবর্তে Java objects ব্যবহার করা হয়।
Criteria API কী?
Hibernate Criteria API হল একটি object-oriented API যা Java objects, properties এবং conditions ব্যবহার করে ডেটাবেসের সাথে সম্পর্কিত কুয়েরি তৈরি করতে সহায়তা করে। Criteria API, Session.createCriteria() মেথডের মাধ্যমে ব্যবহার করা হয়, যা আপনাকে কুয়েরি তৈরি এবং execution এ সাহায্য করে।
Criteria API কোড লেখার সময় dynamic query generation, strong typing, এবং compile-time checking প্রদান করে, যা traditional string-based query execution এর তুলনায় অনেক সুবিধাজনক।
Criteria API-র সুবিধা:
- Dynamic Query Creation:
- Criteria API দিয়ে আপনি রানটাইমে কুয়েরি তৈরি করতে পারেন, যা বিশেষভাবে উপকারী যখন আপনাকে বিভিন্ন শর্ত (conditions) অনুযায়ী কুয়েরি তৈরি করতে হয়।
- Type Safety:
- Criteria API টাইপ সেফ। এই কারণে, এটি compile-time তে কুয়েরি সঠিক কিনা তা চেক করে, এবং SQL কোডে টাইপ মিসম্যাচ বা ভুল syntax হওয়ার সম্ভাবনা কমায়।
- No SQL Injection:
- কারণ এটি কুয়েরি স্ট্রিং তৈরি করার জন্য Java objects ব্যবহার করে, SQL Injection-এর সমস্যা কমে যায়।
- Modularization:
- Criteria API আপনাকে আপনার কুয়েরি গঠন এবং কার্যকরী অংশগুলো আলাদা করতে সাহায্য করে, যা কোডের পুনঃব্যবহারযোগ্যতা এবং পরিষ্কারভাবে কাজ করতে সহায়ক।
Criteria API ব্যবহারের উদাহরণ
ধরা যাক, আমাদের একটি Employee টেবিল আছে এবং আমরা Criteria API ব্যবহার করে ডেটাবেস থেকে Employee অবজেক্টের উপর নির্দিষ্ট শর্তে কুয়েরি চালাতে চাই।
1. Basic Criteria Example
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
public class CriteriaExample {
public static void main(String[] args) {
// Hibernate configuration and session factory setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Create Criteria object to query Employee class
Criteria criteria = session.createCriteria(Employee.class);
// Adding condition (where salary > 50000)
criteria.add(Restrictions.gt("salary", 50000));
// Execute the query and get the result list
List<Employee> employees = criteria.list();
// Display the results
for (Employee employee : employees) {
System.out.println(employee);
}
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
কী ঘটছে?
session.createCriteria(Employee.class)দ্বারা Employee ক্লাসের জন্য একটি Criteria object তৈরি করা হয়েছে।criteria.add(Restrictions.gt("salary", 50000))দিয়েsalary > 50000শর্ত যুক্ত করা হয়েছে।criteria.list()মেথড ব্যবহার করে কুয়েরি এক্সিকিউট করা হয়েছে এবং সেই অনুযায়ী সমস্তEmployeeরেকর্ড বের করা হয়েছে।
2. Using Multiple Conditions (AND/OR Conditions)
Criteria API দিয়ে আপনি একাধিক শর্ত (conditions) যোগ করতে পারেন, যেমন AND বা OR শর্ত।
import org.hibernate.criterion.Restrictions;
public class CriteriaExample {
public static void main(String[] args) {
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// Create Criteria object
Criteria criteria = session.createCriteria(Employee.class);
// Adding multiple conditions with AND operator
criteria.add(Restrictions.and(
Restrictions.eq("department", "Sales"),
Restrictions.gt("salary", 50000)
));
List<Employee> employees = criteria.list();
for (Employee employee : employees) {
System.out.println(employee);
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, AND condition ব্যবহার করা হয়েছে, যেখানে department = "Sales" এবং salary > 50000 দুটি শর্ত একসাথে পূর্ণ হতে হবে।
3. Using Projections (Aggregations)
Criteria API ব্যবহার করে আপনি aggregate functions যেমন count(), avg(), max(), min() ইত্যাদি ব্যবহার করতে পারেন।
import org.hibernate.criterion.Projections;
public class CriteriaExample {
public static void main(String[] args) {
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// Create Criteria object
Criteria criteria = session.createCriteria(Employee.class);
// Add projection (aggregate function)
criteria.setProjection(Projections.avg("salary"));
List<Double> avgSalary = criteria.list();
System.out.println("Average Salary: " + avgSalary.get(0));
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, Projections.avg("salary") ব্যবহার করে সমস্ত Employee এর গড় বেতন হিসাব করা হয়েছে।
Criteria API এর প্রয়োজনীয়তা
- Dynamic Query Generation:
- Criteria API আপনাকে রানটাইমে কুয়েরি তৈরি করার সুবিধা দেয়। এই সুবিধাটি খুবই উপকারী যখন কুয়েরি কন্ডিশনগুলি ব্যবহারকারী ইনপুট বা ডাইনামিক কনফিগারেশনের ভিত্তিতে পরিবর্তন হয়।
- Type Safety:
- Criteria API টাইপ সেফ। এর মানে হল যে আপনি যদি ভুল ফিল্ড বা কলাম নাম দেন, তখন কম্পাইল টাইমেই আপনি সেই ত্রুটি দেখতে পাবেন, যা SQL বা HQL লেখার ক্ষেত্রে সম্ভব নয়।
- SQL Injection থেকে সুরক্ষা:
- Criteria API দ্বারা কুয়েরি তৈরি করার সময়, এটি parameterized queries তৈরি করে, ফলে SQL injection এর ঝুঁকি কমে যায়।
- Better Integration with Java Code:
- Criteria API কেবল Java objects ব্যবহার করে কুয়েরি তৈরি করার সুবিধা দেয়, তাই কোডের মধ্যে ডেটাবেস সম্পর্কিত অংশগুলি বেশি সুসংহত থাকে এবং ডেটাবেস নিরপেক্ষ থাকে।
- Maintainability:
- Criteria API কোড লেখার সময় SQL কোডের পরিবর্তে Java অবজেক্ট এবং মেথড ব্যবহার করা যায়, যা কোড রিডেবিলিটি এবং মেইনটেইনেবিলিটি উন্নত করে।
- Complex Query Building:
- Criteria API দিয়ে আপনি জটিল কুয়েরি যেমন join, group by, order by, aggregate function ইত্যাদি তৈরি করতে পারেন। এতে কোড আরও পরিষ্কার এবং মডুলার থাকে।
Hibernate Criteria API একটি শক্তিশালী, object-oriented উপায় যা ডেটাবেস কুয়েরি তৈরি এবং এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি SQL কোডের পরিবর্তে Java objects ব্যবহার করে কুয়েরি তৈরি করতে সাহায্য করে এবং এতে type safety, dynamic query generation, এবং SQL injection থেকে সুরক্ষা প্রদান করে। Criteria API-এর মাধ্যমে আপনি complex এবং dynamic কুয়েরি তৈরি করতে পারেন যা SQL বা HQL লেখার তুলনায় আরও সহজ এবং নিরাপদ।
Read more