我正在使用Jdbctemplate,需要查询的插入id。我读到了我必须构建一个特定的PreparedStatement并使用GeneratedKeyHolder对象。
问题是在我的应用程序中,所有插入方法都使用这个JdbcTemplate更新方法:
getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
是否有另一种方法可以在不重构所有DAO的情况下获取插入的ID?
我正在使用Jdbctemplate,需要查询的插入id。我读到了我必须构建一个特定的PreparedStatement并使用GeneratedKeyHolder对象。
问题是在我的应用程序中,所有插入方法都使用这个JdbcTemplate更新方法:
getJdbcTemplate().update(SQL_INSERT,param1,param2,param3,...);
是否有另一种方法可以在不重构所有DAO的情况下获取插入的ID?
查看 NamedParameterJdbcTemplate 和 JdbcTemplate 的文档,你有两个选择:
使用 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();
这种方法在PostgreSQL中不起作用,holder会返回所有属性。这里有一个链接,指向在PostgreSQL中使用KeyHolder的解决方案Spring:如何在PostgreSQL中使用KeyHolder