Development Tip

jdbctemplate을 통한 SQL 삽입의 ID

yourdevel 2021. 1. 9. 11:00
반응형

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(SqlParameterSourceparameterSource)

인터페이스에서 복사 된 설명 : 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

반응형