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

How to get inserted id using Spring Jdbctemplate.update(String sql, obj...args)

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

问题是在我的应用程序中所有插入方法都使用这个 JdbcTemplate 更新方法:

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

是否有另一种方法可以在不重构所有 daos 的情况下获取插入的 id?

查看 NamedParameterJdbcTemplate and JdbcTemplate 的文档您有两个选择:

使用NamedParameterJdbcTemplateupdate方法。

使用JdbcTemplateupdate方法。

还有一些其他可用的方法可以填充给定的键 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不起作用,持有returns所有属性。这是 PostgreSQL Spring: How to use KeyHolder with PostgreSQL

中解决方案的 link