Jdbctemplateを使用していますが、クエリのIDを挿入する必要があります。特定のPreparedStatementを作成し、GeneratedKeyHolderオブジェクトを使用する必要があることを読みました。
問題は、私のアプリケーションでは、すべての挿入メソッドがこのJdbcTemplate更新メソッドを使用することです。
getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
すべてのdaosをリファクタリングせずに挿入されたIDを取得する別の方法はありますか?
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();