是否可以从spring jdbc模板调用的sql插入中获取@标识?如果是,怎么做?
gk7wooem1#
怎么样 SimpleJdbcInsert.executeAndReturnKey ? 它有两种形式,具体取决于输入:
SimpleJdbcInsert.executeAndReturnKey
public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)
SimpleJdbcInsertOperations
KeyHolder
指定人: executeAndReturnKey 接口中 SimpleJdbcInsertOperations 参数: args - Map containing column names and corresponding value 退货: the generated key value ###(2) 输入是一个sqlparametersource public java.lang.Number executeAndReturnKey( SqlParameterSource parameterSource) 从接口复制的说明: SimpleJdbcInsertOperations 使用传入的值执行insert并返回生成的键。这要求已指定具有自动生成键的列的名称。此方法将始终返回 KeyHolder 但是调用者必须验证它实际上包含生成的密钥。指定人: executeAndReturnKey 接口中 SimpleJdbcInsertOperations 参数: parameterSource - SqlParameterSource containing values to use for insert 退货:生成的键值。
executeAndReturnKey
args - Map containing column names and corresponding value
the generated key value
public java.lang.Number executeAndReturnKey(
parameterSource)
parameterSource - SqlParameterSource containing values to use for insert
83qze16e2#
向todd.pierzina答案添加详细注解/示例代码
jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns( "Primary_key"); Map<String, Object> parameters = new HashMap<>(); parameters.put("Column_NAME1", bean.getval1()); parameters.put("Column_NAME2", bean.getval2()); // execute insert Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource( parameters)); // convert Number to Int using ((Number) key).intValue() return ((Number) key).intValue();
oxiaedzo3#
这个 JDBCTemplate.update 方法重载以获取名为generatedkeyholder的对象,您可以使用该对象检索自动生成的密钥。例如(代码取自此处):
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
1cosmwyk4#
我不知道是否有一个“一行程序”,但这似乎做到了诀窍(至少对于mssql):
// -- call this after the insert query... this._jdbcTemplate.queryForInt( "select @@identity" );
这里的文章不错。
4条答案
按热度按时间gk7wooem1#
怎么样
SimpleJdbcInsert.executeAndReturnKey
? 它有两种形式,具体取决于输入:(1) 输入是一个Map
public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)
从接口复制的说明:SimpleJdbcInsertOperations
使用传入的值执行insert并返回生成的键。这要求已指定具有自动生成键的列的名称。此方法将始终返回KeyHolder
但是调用者必须验证它实际上包含生成的密钥。指定人:
executeAndReturnKey
接口中SimpleJdbcInsertOperations
参数:args - Map containing column names and corresponding value
退货:the generated key value
###(2) 输入是一个sqlparametersourcepublic java.lang.Number executeAndReturnKey(
SqlParameterSourceparameterSource)
从接口复制的说明:SimpleJdbcInsertOperations
使用传入的值执行insert并返回生成的键。这要求已指定具有自动生成键的列的名称。此方法将始终返回KeyHolder
但是调用者必须验证它实际上包含生成的密钥。指定人:
executeAndReturnKey
接口中SimpleJdbcInsertOperations
参数:parameterSource - SqlParameterSource containing values to use for insert
退货:生成的键值。
83qze16e2#
向todd.pierzina答案添加详细注解/示例代码
oxiaedzo3#
这个
JDBCTemplate.update
方法重载以获取名为generatedkeyholder的对象,您可以使用该对象检索自动生成的密钥。例如(代码取自此处):1cosmwyk4#
我不知道是否有一个“一行程序”,但这似乎做到了诀窍(至少对于mssql):
这里的文章不错。