Как получить вставленный идентификатор с помощью Spring Jdbctemplate.update(String sql, obj...args)
Я использую Jdbctemplate и мне нужен вставленный идентификатор запроса. Я прочитал, что мне нужно создать конкретный PreparedStatement и использовать объект GeneratedKeyHolder.
Проблема в том, что в моем приложении все методы вставки использует этот метод обновления JdbcTemplate:
getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
Есть ли другой способ получить вставленный идентификатор без рефакторинга всех даосов?
1 ответ
Просмотр документации для NamedParameterJdbcTemplate и JdbcTemplate У вас есть два варианта:
использование NamedParameterJdbcTemplate
метод обновления.
использование JdbcTemplate
метод обновления.
Есть также некоторые другие доступные методы, которые будут заполнять ключи для данного 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();
Это не работает для PostgreSQL, держатель возвращает все атрибуты. Вот ссылка на решение в PostgreSQL Spring: Как использовать KeyHolder с PostgreSQL