Spring JDBC-তে SimpleJdbcCall ব্যবহার করে ডেটাবেসের Stored Procedure কল করা সহজ এবং কার্যকর। এটি JDBC API-এর জটিলতা সরিয়ে একটি সিম্পল এবং ক্লিন এপিআই প্রদান করে, যা ইনপুট ও আউটপুট প্যারামিটার ম্যানেজ করার পাশাপাশি প্রয়োজনীয় SQL কুয়েরি অটোমেটিক জেনারেট করতে পারে।
SimpleJdbcCall কি?
SimpleJdbcCall হলো Spring JDBC-র একটি ক্লাস, যা Stored Procedure বা ফাংশন পরিচালনার জন্য ব্যবহার করা হয়। এটি Stored Procedure-এর ইনপুট এবং আউটপুট প্যারামিটারগুলোর জন্য অটোমেটিক মেটাডেটা রিট্রিভ করতে সক্ষম।
SimpleJdbcCall ব্যবহারের ধাপ
১. ডিপেন্ডেন্সি যোগ করা
Spring JDBC এবং ড্রাইভার ডিপেন্ডেন্সি প্রয়োজন।
Maven:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
২. ডেটাসোর্স কনফিগারেশন
Spring Framework বা Spring Boot ব্যবহার করে DataSource কনফিগার করুন।
Spring Boot (application.properties):
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Java Configuration (Spring Framework):
@Bean
public DataSource 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");
return dataSource;
}
৩. Stored Procedure তৈরি করা
নিচের উদাহরণটি একটি MySQL Stored Procedure এর জন্য:
DELIMITER
DELIMITER ;
৪. SimpleJdbcCall ব্যবহার করা
Spring JDBC-তে SimpleJdbcCall ব্যবহার করে Stored Procedure কল করতে পারেন।
উদাহরণ ১: ইনপুট এবং আউটপুট প্যারামিটার সহ Stored Procedure
@Service
public class UserService {
private final SimpleJdbcCall simpleJdbcCall;
@Autowired
public UserService(JdbcTemplate jdbcTemplate) {
this.simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("GetUserById");
}
public String getUserById(int userId) {
// ইনপুট প্যারামিটার
SqlParameterSource inParams = new MapSqlParameterSource()
.addValue("userId", userId);
// Stored Procedure কল করা এবং আউটপুট প্যারামিটার রিসিভ করা
Map<String, Object> out = simpleJdbcCall.execute(inParams);
return (String) out.get("userName");
}
}
কোড ব্যাখ্যা:
SimpleJdbcCall:withProcedureName("GetUserById")দিয়ে Stored Procedure এর নাম উল্লেখ করা হয়।
SqlParameterSource:- ইনপুট প্যারামিটার সেট করার জন্য ব্যবহৃত হয়।
execute():- Stored Procedure চালায় এবং আউটপুট প্যারামিটার রিটার্ন করে।
উদাহরণ ২: শুধুমাত্র আউটপুট প্যারামিটার সহ Stored Procedure
public int getTotalUsers() {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("GetTotalUsers")
.declareParameters(
new SqlOutParameter("totalUsers", Types.INTEGER)
);
Map<String, Object> out = jdbcCall.execute();
return (Integer) out.get("totalUsers");
}
উদাহরণ ৩: Multiple Input এবং Output প্যারামিটার সহ Stored Procedure
Stored Procedure:
DELIMITER
DELIMITER ;
Spring JDBC Implementation:
public String updateUserEmail(int userId, String newEmail) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("UpdateUserEmail");
SqlParameterSource inParams = new MapSqlParameterSource()
.addValue("userId", userId)
.addValue("newEmail", newEmail);
Map<String, Object> out = jdbcCall.execute(inParams);
return (String) out.get("statusMessage");
}
উপকারিতা
- অটোমেটিক মেটাডেটা: Stored Procedure-এর প্যারামিটার ডাইনামিক্যালি রিট্রিভ করা যায়।
- কোড সিম্পলিফিকেশন: কম কোডে জটিল Stored Procedure হ্যান্ডল করা যায়।
- Reusable Component:
SimpleJdbcCallএকবার কনফিগার করলে বারবার ব্যবহার করা যায়। - কাস্টমাইজেশন: ইনপুট এবং আউটপুট প্যারামিটার ম্যানেজ করার ক্ষমতা।
সীমাবদ্ধতা
- ডিপেন্ডেন্সি: স্প্রিং ফ্রেমওয়ার্কের ওপর নির্ভরশীল।
- কমপ্লেক্স Stored Procedure: জটিল লজিক ব্যবস্থাপনার জন্য অতিরিক্ত কাস্টমাইজেশন প্রয়োজন হতে পারে।
উপসংহার
Spring JDBC-তে SimpleJdbcCall ব্যবহার করে Stored Procedure হ্যান্ডল করা সহজ, কার্যকর এবং রিডেবল। এটি ইনপুট ও আউটপুট প্যারামিটার ব্যবস্থাপনার কাজকে অনেকটাই সরল করে। ছোট থেকে মাঝারি প্রজেক্টের জন্য এটি অত্যন্ত উপযোগী।
Read more