[SPRING] Spring jdbcTemplate과 PreparedStatementSetter를 사용하여 생성 된 컬럼 id 값을 반환하는 방법을 모르고있다.
SPRINGSpring jdbcTemplate과 PreparedStatementSetter를 사용하여 생성 된 컬럼 id 값을 반환하는 방법을 모르고있다.
리팩터링하기 전에 jdbcTemplate, preparedStatementCreator 및 GeneratedKeyHolder를 사용하여 삽입 된 행의 생성 된 ID를 저장하는 행을 db에 삽입했습니다.
jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder)
그러나 지금은 jdbcTemplate을 사용하여 업데이트를 실행하려고하지만 이제는 preparedStatementSetter를 사용하여 업데이트를 실행하려고합니다. 유일한 방법은 우리가 볼 수있는이 우리 jdbcTemplate.update (String sql, PreparedStatementSetter)하지만 지금 생성 된 열의 ID를 반환하는 방법을 잘 모르겠습니다.
PreparedStatementSetter pss = new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement)
throws SQLException {
preparedStatement.setString(1, pupil.getFirstname());
preparedStatement.setString(2, pupil.getSurname());
preparedStatement.setString(3, pupil.getGivenName());
preparedStatement.setDate(4, pupil.getDob());
}
};
jdbcTemplate.update("INSERT INTO STUDENTS "+ "(FIRSTNAME, SURNAME, GIVEN_NAME, DOB) VALUES (?,?,?,?)",pss);
preparedStatements에 대한 내 접근 방식이 맞다고 가정하면, 생성 된 ID의 값을 어떻게 반환 할 수 있는지 알 수 있습니까?
해결법
-
==============================
1.생성 된 키는 JdbcTemplate # update (PreparedStatementCreator, KeyHolder) 메소드와 함께 리턴 될 수 있습니다. 하지만 이것을 달성하기 위해서는 org.springframework.jdbc.core.PreparedStatementCreatorFactory를 기반으로 요청을 변경해야합니다.
생성 된 키는 JdbcTemplate # update (PreparedStatementCreator, KeyHolder) 메소드와 함께 리턴 될 수 있습니다. 하지만 이것을 달성하기 위해서는 org.springframework.jdbc.core.PreparedStatementCreatorFactory를 기반으로 요청을 변경해야합니다.
대신 SimpleJdbcInsert 유틸리티 클래스를 삽입하는 데 사용하는 것이 좋습니다.
DB 필드가 엔티티 필드와 매우 같으면 다음과 같이 간단히 수행 할 수 있습니다.
Number key = jdbcInsert.executeAndReturnKey(new BeanPropertySqlParameterSource(entity)); //set generated key if (key != null){ entity.setId(key.longValue()); }
그것이 (귀하의 경우와 같이)
//define parameters Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("FIRSTNAME", pupil.getFirstname()); parameters.put("SURNAME", pupil.getSurname()); parameters.put("GIVEN_NAME", pupil.getGivenName()); parameters.put("DOB", pupil.getDob()); //execute insert Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); //set generated key if (key != null){ pupil.setId(key.longValue()); }
jdbcInsert 매개 변수는 각 엔티티에 대해 한 번 정의해야하며 다음과 같이 표시됩니다.
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()); jdbcInsert.withTableName(entityName); //e.g. "STUDENTS" jdbcInsert.setGeneratedKeyName(idColumn); //e.g. "ID" jdbcInsert.setColumnNames(columnNames); //e.g. Arrays.asList("FIRSTNAME", "SURNAME", "GIVEN_NAME", "DOB")
from https://stackoverflow.com/questions/16932814/unsure-how-to-return-generated-column-id-value-using-spring-jdbctemplate-and-pre by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 단계별 스프링 배치 흐름 / 분할 (0) | 2019.04.22 |
---|---|
[SPRING] 유닛 테스트를위한 객체 MockHttpServletResponse 생성 오류 (0) | 2019.04.22 |
[SPRING] CreateQuery가 활성 트랜잭션없이 유효하지 않습니다. (0) | 2019.04.22 |
[SPRING] 상속 된 클래스의 봄 MVC 유효성 검사 (0) | 2019.04.22 |
[SPRING] Spring Cloud Ribbon에서 ribbon.serverListRefreshInterval 기본값을 재정의하는 방법은 무엇입니까? (0) | 2019.04.22 |