Spring JDBC-তে JdbcTemplate একটি অত্যন্ত গুরুত্বপূর্ণ ক্লাস যা ডাটাবেস অপারেশনগুলো সহজতর করে। এর মধ্যে queryForObject() এবং query() মেথড দুটি সাধারণ ডাটাবেস রিড অপারেশনের জন্য ব্যবহৃত হয়।
1. queryForObject()
queryForObject() মেথড ব্যবহার করা হয় যখন আমরা নিশ্চিত থাকি যে ডাটাবেস থেকে একটি সুনির্দিষ্ট একক রেকর্ড (single row) রিটার্ন হবে। এটি সাধারণত সিঙ্গেল কলাম বা একটি অবজেক্ট ম্যাপিং করার জন্য ব্যবহৃত হয়।
সিগনেচার:
<T> T queryForObject(String sql, Class<T> requiredType)
<T> T queryForObject(String sql, Object[] args, Class<T> requiredType)
<T> T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper)
উদাহরণ ১: সিঙ্গেল ভ্যালু রিটার্ন করা
একটি টেবিল থেকে employee_count রিটার্ন করা:
String sql = "SELECT COUNT(*) FROM employees";
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println("Total Employees: " + count);
উদাহরণ ২: অবজেক্ট রিটার্ন করা
একটি নির্দিষ্ট আইডি দিয়ে Employee অবজেক্ট রিটার্ন করা:
String sql = "SELECT id, name, department FROM employees WHERE id = ?";
Employee employee = jdbcTemplate.queryForObject(
sql,
new Object[] {1},
(rs, rowNum) -> {
Employee emp = new Employee();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setDepartment(rs.getString("department"));
return emp;
}
);
System.out.println("Employee Name: " + employee.getName());
2. query()
query() মেথড ব্যবহার করা হয় যখন ডাটাবেস থেকে একাধিক রেকর্ড (multiple rows) রিটার্ন করতে হয়। এটি সাধারণত একটি লিস্ট বা কলেকশন ফর্মে রিটার্ন করে।
সিগনেচার:
<T> List<T> query(String sql, RowMapper<T> rowMapper)
<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
<T> List<T> query(String sql, ResultSetExtractor<T> resultSetExtractor)
উদাহরণ ১: একাধিক রেকর্ড রিটার্ন করা
employees টেবিল থেকে সব এমপ্লয়ি রেকর্ড ফেচ করা:
String sql = "SELECT id, name, department FROM employees";
List<Employee> employees = jdbcTemplate.query(
sql,
(rs, rowNum) -> {
Employee emp = new Employee();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setDepartment(rs.getString("department"));
return emp;
}
);
employees.forEach(emp -> System.out.println("Employee Name: " + emp.getName()));
উদাহরণ ২: ফিল্টার করা রেকর্ড রিটার্ন করা
নির্দিষ্ট ডিপার্টমেন্টের এমপ্লয়ি লিস্ট রিটার্ন করা:
String sql = "SELECT id, name, department FROM employees WHERE department = ?";
List<Employee> employees = jdbcTemplate.query(
sql,
new Object[] {"HR"},
(rs, rowNum) -> {
Employee emp = new Employee();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setDepartment(rs.getString("department"));
return emp;
}
);
employees.forEach(emp -> System.out.println("Employee Name: " + emp.getName()));
queryForObject() বনাম query(): প্রধান পার্থক্য
| প্যারামিটার | queryForObject() | query() |
|---|---|---|
| ব্যবহার ক্ষেত্র | একক রেকর্ড বা সিঙ্গেল রাউ রিটার্ন করার জন্য। | একাধিক রেকর্ড বা রাউ রিটার্ন করার জন্য। |
| রিটার্ন টাইপ | একটি অবজেক্ট রিটার্ন করে। | একটি লিস্ট বা কলেকশন রিটার্ন করে। |
| ব্যতিক্রম | যদি কোনো রেকর্ড পাওয়া না যায়, EmptyResultDataAccessException থ্রো করে। | রেকর্ড না পেলে খালি লিস্ট রিটার্ন করে। |
কোনটি ব্যবহার করবেন?
- queryForObject():
- যখন আপনি নিশ্চিত যে শুধুমাত্র একটি রেকর্ড রিটার্ন হবে।
- একক ভ্যালু বা একক অবজেক্ট পেতে।
- query():
- যখন আপনি একাধিক রেকর্ড রিটার্ন করতে চান।
- বড় ডাটাসেট থেকে ফিল্টার করা রেকর্ড পেতে।
Spring JDBC-র queryForObject() এবং query() মেথড ডাটাবেস অপারেশনগুলোকে সহজ এবং কার্যকর করে তোলে। এগুলো ডেভেলপারের কাজের সময় এবং প্রচেষ্টা উভয়ই বাঁচায়।
Read more