如何使用Spring Jdbctemplate.update(String sql,obj ... args)获取插入的id

Tob*_*bia 5 mysql spring spring-jdbc last-insert-id

我正在使用Jdbctemplate,我需要插入查询的id.我读到我必须构建一个特定的PreparedStatement并使用GeneratedKeyHolder对象.

问题是在我的应用程序中,所有insert方法都使用此JdbcTemplate更新方法:

getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
Run Code Online (Sandbox Code Playgroud)

有没有另一种方法来获得插入的ID而不重构所有的daos?

Pau*_*nis 13

查看NamedParameterJdbcTemplateJdbcTemplate的文档您有两个选择:

使用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();
Run Code Online (Sandbox Code Playgroud)