Spring JDBC তে PreparedStatementCreator এবং PreparedStatementSetter ব্যবহার করা

Spring JDBC এ PreparedStatement ব্যবহার - স্প্রিং জেডিবিসি (Spring JDBC) - Java Technologies

281

Spring JDBC ডেটাবেস অপারেশনের জন্য সুবিধাজনক টুলস সরবরাহ করে। PreparedStatementCreator এবং PreparedStatementSetter হলো দুটি ইন্টারফেস, যা জটিল SQL কুয়েরি বা ডাইনামিক প্যারামিটার সেট করার জন্য ব্যবহার করা হয়। এগুলো ডেটাবেস ইন্টিগ্রেশনে আরও বেশি কাস্টমাইজেশন এবং নিরাপত্তা নিশ্চিত করে।


১. PreparedStatementCreator

PreparedStatementCreator ইন্টারফেস ব্যবহার করে, আপনি কাস্টম PreparedStatement তৈরি করতে পারেন। এটি SQL কুয়েরি এবং তার প্যারামিটারগুলো ডাইনামিক্যালি সেট করার জন্য কার্যকর।

কোড স্ট্রাকচার

public interface PreparedStatementCreator {
    PreparedStatement createPreparedStatement(Connection con) throws SQLException;
}

ব্যবহার উদাহরণ

উপস্থিত ডেটাবেস কানেকশন দিয়ে একটি PreparedStatement তৈরি করুন।

public int insertUserWithPreparedStatementCreator(User user) {
    String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";

    return jdbcTemplate.update(con -> {
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setInt(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getEmail());
        return ps;
    });
}

এখানে:

  • con -> { ... } হলো PreparedStatementCreator এর একটি ল্যাম্বডা ইমপ্লিমেন্টেশন।
  • jdbcTemplate.update() মেথডের মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট করা হচ্ছে।

২. PreparedStatementSetter

PreparedStatementSetter ইন্টারফেস ব্যবহার করে, একটি বিদ্যমান PreparedStatement-এর প্যারামিটার সেট করা যায়। এটি সাধারণত যেখানে একই SQL বারবার ব্যবহার করা হবে সেসব ক্ষেত্রে কার্যকর।

কোড স্ট্রাকচার

public interface PreparedStatementSetter {
    void setValues(PreparedStatement ps) throws SQLException;
}

ব্যবহার উদাহরণ

ডাইনামিক প্যারামিটার সেট করার জন্য PreparedStatementSetter ব্যবহার করুন।

public int updateUserWithPreparedStatementSetter(int id, String newEmail) {
    String sql = "UPDATE users SET email = ? WHERE id = ?";

    return jdbcTemplate.update(sql, new PreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps) throws SQLException {
            ps.setString(1, newEmail);
            ps.setInt(2, id);
        }
    });
}

এখানে:

  • PreparedStatementSetter ইন্টারফেস ইমপ্লিমেন্ট করে প্যারামিটার সেট করা হয়েছে।
  • jdbcTemplate.update() মেথড SQL অপারেশন পরিচালনা করছে।

PreparedStatementCreator এবং PreparedStatementSetter একসাথে ব্যবহার

কখনো কখনো PreparedStatementCreator এবং PreparedStatementSetter একত্রে ব্যবহার করতে হয়।

public int saveUser(User user) {
    String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";

    PreparedStatementCreator psc = con -> {
        PreparedStatement ps = con.prepareStatement(sql);
        return ps;
    };

    PreparedStatementSetter pss = ps -> {
        ps.setInt(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getEmail());
    };

    return jdbcTemplate.update(psc, pss);
}

PreparedStatementCreator vs PreparedStatementSetter

ফিচারPreparedStatementCreatorPreparedStatementSetter
কাজসম্পূর্ণ নতুন PreparedStatement তৈরি করতে ব্যবহার হয়।বিদ্যমান PreparedStatement-এ প্যারামিটার সেট করতে ব্যবহার হয়।
ব্যবহারSQL কুয়েরি এবং প্যারামিটার ডাইনামিকভাবে তৈরি করা।সাধারণত বারবার ব্যবহারযোগ্য কুয়েরি অপটিমাইজেশনে।
প্রয়োগের পদ্ধতিল্যাম্বডা বা অ্যানোনিমাস ক্লাস।ল্যাম্বডা বা অ্যানোনিমাস ক্লাস।

উদাহরণ: PreparedStatementCreator এবং PreparedStatementSetter এর ব্যবহার

মাল্টিপল প্যারামিটার সহ ডেটা ইনসার্ট করা:

public void batchInsertUsers(List<User> users) {
    String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";

    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            User user = users.get(i);
            ps.setInt(1, user.getId());
            ps.setString(2, user.getName());
            ps.setString(3, user.getEmail());
        }

        @Override
        public int getBatchSize() {
            return users.size();
        }
    });
}

উপকারিতা

  1. SQL ইনজেকশন প্রতিরোধ: PreparedStatement-এর কারণে ডেটা সুরক্ষিত থাকে।
  2. কোড রিইউজযোগ্যতা: কমপ্লেক্স লজিককে আলাদা করে মডুলার করা যায়।
  3. কাস্টমাইজেশন: স্পেসিফিক ডেটা ম্যানিপুলেশনের জন্য উপযোগী।

PreparedStatementCreator এবং PreparedStatementSetter Spring JDBC এর শক্তিশালী ফিচার, যা ডাটাবেস ইন্টিগ্রেশনে আরও বেশি নিয়ন্ত্রণ এবং নিরাপত্তা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...