通过 jdbctemplate 从 sql insert 获得的身份

2022-08-31 15:47:23

是否可以从 Spring jdbc 模板调用的 SQL 插入中获取@@identity?如果是这样,如何?


答案 1

该方法被重载以采用一个名为 GenerateKeyHolder 的对象,您可以使用该对象来检索自动生成的键。例如(代码取自此处):JDBCTemplate.update

final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
    new PreparedStatementCreator() {
        public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
            PreparedStatement ps =
                connection.prepareStatement(INSERT_SQL, new String[] {"id"});
            ps.setString(1, name);
            return ps;
        }
    },
    keyHolder);
// keyHolder.getKey() now contains the generated key

答案 2

怎么样?它采用两种形式,具体取决于输入:SimpleJdbcInsert.executeAndReturnKey

(1) 输入为地图

public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)

从接口复制的描述: SimpleJdbcInsertOperations

使用传入的值执行插入,并返回生成的密钥。这要求指定具有自动生成键的列的名称。此方法将始终返回 a,但调用方必须验证它是否确实包含生成的密钥。KeyHolder

指定者:

executeAndReturnKey in interface SimpleJdbcInsertOperations

参数:

args - Map containing column names and corresponding value

返回:

the generated key value

(2) 输入是 Sql 参数源

public java.lang.Number executeAndReturnKey(SqlParameterSourceparameterSource)

从接口复制的描述: SimpleJdbcInsertOperations

使用传入的值执行插入,并返回生成的密钥。这要求指定具有自动生成键的列的名称。此方法将始终返回 a,但调用方必须验证它是否确实包含生成的密钥。KeyHolder

指定者:

executeAndReturnKey in interface SimpleJdbcInsertOperations

参数:

parameterSource - SqlParameterSource containing values to use for insert

返回:

生成的键值。


推荐