SimpleJdbcCall ব্যবহার করে Stored Procedure পরিচালনা

Spring JDBC এবং Stored Procedures - স্প্রিং জেডিবিসি (Spring JDBC) - Java Technologies

307

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 CREATEPROCEDUREGetUserById(INuserIdINT,OUTuserNameVARCHAR(50))BEGINSELECTnameINTOuserNameFROMusersWHEREid=userId;END

CREATE PROCEDURE GetUserById(IN userId INT, OUT userName VARCHAR(50))
BEGIN
    SELECT name INTO userName FROM users WHERE id = userId;
END

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");
    }
}

কোড ব্যাখ্যা:

  1. SimpleJdbcCall:
    • withProcedureName("GetUserById") দিয়ে Stored Procedure এর নাম উল্লেখ করা হয়।
  2. SqlParameterSource:
    • ইনপুট প্যারামিটার সেট করার জন্য ব্যবহৃত হয়।
  3. 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 CREATEPROCEDUREUpdateUserEmail(INuserIdINT,INnewEmailVARCHAR(100),OUTstatusMessageVARCHAR(100))BEGINUPDATEusersSETemail=newEmailWHEREid=userId;SETstatusMessage='UpdateSuccessful';END

CREATE PROCEDURE UpdateUserEmail(
    IN userId INT, 
    IN newEmail VARCHAR(100), 
    OUT statusMessage VARCHAR(100)
)
BEGIN
    UPDATE users SET email = newEmail WHERE id = userId;
    SET statusMessage = 'Update Successful';
END

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");
}

উপকারিতা

  1. অটোমেটিক মেটাডেটা: Stored Procedure-এর প্যারামিটার ডাইনামিক্যালি রিট্রিভ করা যায়।
  2. কোড সিম্পলিফিকেশন: কম কোডে জটিল Stored Procedure হ্যান্ডল করা যায়।
  3. Reusable Component: SimpleJdbcCall একবার কনফিগার করলে বারবার ব্যবহার করা যায়।
  4. কাস্টমাইজেশন: ইনপুট এবং আউটপুট প্যারামিটার ম্যানেজ করার ক্ষমতা।

সীমাবদ্ধতা

  1. ডিপেন্ডেন্সি: স্প্রিং ফ্রেমওয়ার্কের ওপর নির্ভরশীল।
  2. কমপ্লেক্স Stored Procedure: জটিল লজিক ব্যবস্থাপনার জন্য অতিরিক্ত কাস্টমাইজেশন প্রয়োজন হতে পারে।

উপসংহার

Spring JDBC-তে SimpleJdbcCall ব্যবহার করে Stored Procedure হ্যান্ডল করা সহজ, কার্যকর এবং রিডেবল। এটি ইনপুট ও আউটপুট প্যারামিটার ব্যবস্থাপনার কাজকে অনেকটাই সরল করে। ছোট থেকে মাঝারি প্রজেক্টের জন্য এটি অত্যন্ত উপযোগী।

Content added By
Promotion

Are you sure to start over?

Loading...