web-dev-qa-db-ja.com

Spring Jdbctemplate.update(String sql、obj ... args)を使用して挿入IDを取得する方法

Jdbctemplateを使用していますが、クエリのIDを挿入する必要があります。特定のPreparedStatementを作成し、GeneratedKeyHolderオブジェクトを使用する必要があることを読みました。

問題は、私のアプリケーションでは、すべての挿入メソッドがこのJdbcTemplate更新メソッドを使用することです。

getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);

すべてのdaosをリファクタリングせずに挿入されたIDを取得する別の方法はありますか?

6
Tobia

NamedParameterJdbcTemplate および JdbcTemplate のドキュメントを見るには、次の2つの選択肢があります。

NamedParameterJdbcTemplateの-​​ pdate メソッドを使用します。

JdbcTemplateの-​​ pdate メソッドを使用します。

与えられた GeneratedKeyHolder にキーを設定する利用可能な他のいくつかのメソッドもあります。どれがあなたのニーズに合うかはあなた次第です。

[〜#〜]編集[〜#〜]

例: JdbcTemplateの使用:

GeneratedKeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
    @Override
    public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
        PreparedStatement statement = con.prepareStatement("INSERT INTO SOME_TABLE(NAME, VALUE) VALUES (?, ?) ", Statement.RETURN_GENERATED_KEYS);
        statement.setString(1, "SomeName");
        statement.setString(2, "SomeValue");
        return statement;
    }
}, holder);

long primaryKey = holder.getKey().longValue();
15