jdbctemplate을 통한 SQL 삽입의 ID
Spring jdbc 템플릿 호출의 SQL 삽입에서 @@ identity를 가져올 수 있습니까? 그렇다면 어떻게?
이 JDBCTemplate.update
메서드는 자동 생성 된 키를 검색하는 데 사용할 수있는 GeneratedKeyHolder라는 개체를 가져 오도록 오버로드됩니다. 예 ( 여기 에서 가져온 코드 ) :
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
어때요 SimpleJdbcInsert.executeAndReturnKey
? 입력에 따라 두 가지 형식을 취합니다.
(1) 입력은 Map
public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)
인터페이스에서 복사 된 설명 :
SimpleJdbcInsertOperations
전달 된 값을 사용하여 삽입을 실행하고 생성 된 키를 반환합니다. 이를 위해서는 자동 생성 키가있는 열의 이름이 지정되어야합니다. 이 메서드는 항상 a를 반환
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
전달 된 값을 사용하여 삽입을 실행하고 생성 된 키를 반환합니다. 이를 위해서는 자동 생성 키가있는 열의 이름이 지정되어야합니다. 이 메서드는 항상 a를 반환
KeyHolder
하지만 호출자는 생성 된 키가 실제로 포함되어 있는지 확인해야합니다.지정자 :
executeAndReturnKey
인터페이스에서SimpleJdbcInsertOperations
매개 변수 :
parameterSource - SqlParameterSource containing values to use for insert
보고:
생성 된 키 값.
Adding detailed notes/sample code to todd.pierzina answer
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();
I don't know if there is a "one-liner" but this seems to do the trick (for MSSQL at least):
// -- call this after the insert query...
this._jdbcTemplate.queryForInt( "select @@identity" );
Decent article here.
ReferenceURL : https://stackoverflow.com/questions/1665846/identity-from-sql-insert-via-jdbctemplate
'Development Tip' 카테고리의 다른 글
배열 구문 대 포인터 구문 및 코드 생성? (0) | 2021.01.09 |
---|---|
System.Configuration.ConfigurationManager not available? (0) | 2021.01.09 |
해시 맵에서 키 목록을 반환하는 방법은 무엇입니까? (0) | 2021.01.09 |
기존 클래스에서 인터페이스 생성 (0) | 2021.01.09 |
URL에서 반환 된 Zip 파일 다운로드 (0) | 2021.01.09 |