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

时间:2016-01-29 16:05:37

标签: mysql spring spring-jdbc last-insert-id

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

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

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

有没有其他方法可以在不重构所有daos的情况下获取插入的id?

2 个答案:

答案 0 :(得分:9)

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

使用NamedParameterJdbcTemplate' update方法。

使用JdbcTemplate' update方法。

还有一些其他方法可以填充给定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();

答案 1 :(得分:0)

这不适用于PostgreSQL,所有者返回所有属性。这是PostgreSQL Spring: How to use KeyHolder with PostgreSQL

中解决方案的链接