Как получить вставленный идентификатор с помощью 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

Другие вопросы по тегам