Spring JDBC ডেটাবেস থেকে ডেটা রিট্রাইভ করার জন্য RowMapper এবং ResultSetExtractor ইন্টারফেস সরবরাহ করে। এদের মাধ্যমে ডেটাকে জাভার অবজেক্টে ম্যাপ করা সহজ হয় এবং কোড আরও পরিষ্কার এবং সংগঠিত হয়।
1. RowMapper:
RowMapper ইন্টারফেস ব্যবহার করে প্রতিটি ডেটাবেস রেকর্ডকে একটি অবজেক্টে ম্যাপ করা হয়। এটি প্রতিটি রো প্রসেস করার জন্য একটি mapRow() মেথড সরবরাহ করে।
Syntax:
public interface RowMapper<T> {
T mapRow(ResultSet rs, int rowNum) throws SQLException;
}
উদাহরণ: RowMapper এর ব্যবহার
ধরা যাক, আমাদের একটি Employee ক্লাস এবং employees টেবিল আছে।
Employee.java
public class Employee {
private int id;
private String name;
private String department;
// Getters and Setters
}
ডেটা রিট্রাইভ করার উদাহরণ:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class RowMapperExample {
public static void main(String[] args) {
// DataSource সেটআপ
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// SQL Query
String query = "SELECT * FROM employees";
// RowMapper Implementation
List<Employee> employees = jdbcTemplate.query(query, new RowMapper<Employee>() {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setDepartment(rs.getString("department"));
return employee;
}
});
// Output Results
for (Employee emp : employees) {
System.out.println("ID: " + emp.getId() + ", Name: " + emp.getName() + ", Department: " + emp.getDepartment());
}
}
}
Lambda Expression ব্যবহার:
List<Employee> employees = jdbcTemplate.query(query, (rs, rowNum) -> {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setDepartment(rs.getString("department"));
return employee;
});
2. ResultSetExtractor:
ResultSetExtractor ইন্টারফেস ব্যবহার করে পুরো ResultSet প্রসেস করা হয়। এটি বড় ডেটাসেট বা কাস্টম লজিক প্রয়োগের জন্য উপযোগী।
Syntax:
public interface ResultSetExtractor<T> {
T extractData(ResultSet rs) throws SQLException, DataAccessException;
}
উদাহরণ: ResultSetExtractor এর ব্যবহার
ডেটা রিট্রাইভ করার উদাহরণ:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ResultSetExtractorExample {
public static void main(String[] args) {
// DataSource সেটআপ
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// SQL Query
String query = "SELECT * FROM employees";
// ResultSetExtractor Implementation
List<Employee> employees = jdbcTemplate.query(query, new ResultSetExtractor<List<Employee>>() {
@Override
public List<Employee> extractData(ResultSet rs) throws SQLException {
List<Employee> employeeList = new ArrayList<>();
while (rs.next()) {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setDepartment(rs.getString("department"));
employeeList.add(employee);
}
return employeeList;
}
});
// Output Results
for (Employee emp : employees) {
System.out.println("ID: " + emp.getId() + ", Name: " + emp.getName() + ", Department: " + emp.getDepartment());
}
}
}
RowMapper এবং ResultSetExtractor এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | RowMapper | ResultSetExtractor |
|---|---|---|
| প্রক্রিয়াকরণ পদ্ধতি | প্রতিটি রো প্রসেস করে। | পুরো ResultSet প্রসেস করে। |
| উপযোগিতা | সাধারণ ক্ষেত্রে ব্যবহৃত হয়। | বড় বা জটিল ডেটাসেটের জন্য ব্যবহৃত। |
| সহজতা | সহজ এবং ক্লিন কোড তৈরি করে। | কাস্টম লজিক প্রয়োগের জন্য কার্যকর। |
কোনটি ব্যবহার করবেন?
RowMapper:
যখন প্রতিটি রো সহজভাবে একটি অবজেক্টে ম্যাপ করতে হবে।
উদাহরণ: একটিSELECTস্টেটমেন্টের ফলাফল ম্যাপ করা।ResultSetExtractor:
যখন ডেটাবেসের রেকর্ড প্রসেস করতে কাস্টম লজিক প্রয়োজন, যেমন: একাধিক টেবিলের ডেটা ম্যাপ করা বা জটিল ডেটাসেট প্রসেস করা।
উপসংহার:
Spring JDBC-তে RowMapper এবং ResultSetExtractor ডেটা ম্যাপিংয়ের জন্য শক্তিশালী টুল। আপনার প্রয়োজন অনুযায়ী এই দুটি ইন্টারফেস ব্যবহার করে সহজে ডেটাবেস থেকে ডেটা রিট্রাইভ এবং প্রসেস করা যায়।
Read more