SimpleJdbcInsert는 Spring Framework에서 제공하는 JDBC 추상화의 일부로, 데이터베이스에 새로운 레코드를 삽입하는 작업을 단순화하고 편리하게 만들어준다. NamedParameterJdbcTemplate과 유사하게, SimpleJdbcInsert는 이름이 지정된 파라미터를 사용하여 SQL 쿼리 없이 데이터베이스 테이블에 직접 삽입할 수 있게 해준다. 이를 통해 코드의 가독성이 향상되고, SQL 쿼리 실수를 줄일 수 있다.
설정 방법
SimpleJdbcInsert는 DataSource를 사용하여 생성될 수 있다. 생성 후, 사용할 데이터베이스 테이블과 해당 테이블의 기본 키 컬럼을 설정할 수 있다.
@Autowired
private DataSource dataSource;
private SimpleJdbcInsert simpleJdbcInsert;
@PostConstruct
public void postConstruct() {
simpleJdbcInsert = new SimpleJdbcInsert(dataSource)
.withTableName("users") // 사용할 테이블 이름 설정
.usingGeneratedKeyColumns("id"); // 자동 생성되는 키 컬럼 이름 설정
}
사용 예제
SimpleJdbcInsert를 사용하여 데이터베이스에 레코드를 삽입하는 과정은 다음과 같다.
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", "홍길동");
parameters.put("email", "hong@example.com");
// 삽입 실행 및 자동 생성된 키 반환
Number newId = simpleJdbcInsert.executeAndReturnKey(parameters);
이 예제에서는 Map을 사용하여 삽입할 데이터를 정의한다. 그리고 executeAndReturnKey 메소드를 사용하여 실제 삽입 작업을 수행하고, 자동으로 생성된 키(예를 들어, auto-increment 속성을 가진 ID 컬럼의 값)를 반환받는다.
장점
SQL 쿼리 작성 필요 없음: SimpleJdbcInsert를 사용하면 복잡한 INSERT SQL 쿼리를 작성할 필요가 없어, 실수의 가능성을 줄일 수 있다.
가독성 향상: 삽입할 데이터를 Map이나 SqlParameterSource로 직접 정의하기 때문에, 코드의 가독성이 향상된다.
자동 키 생성 지원: 자동으로 생성된 키 값을 쉽게 얻을 수 있어, 삽입 후 해당 레코드에 대한 후속 작업을 간편하게 수행할 수 있다.
withTableName(String tableName)
withTableName 메소드는 SimpleJdbcInsert가 데이터를 삽입할 테이블의 이름을 설정한다.
이 메소드는 SimpleJdbcInsert 객체를 생성한 후 호출되어야 하며, 한 번 설정되면 해당 인스턴스는 설정된 테이블 이름으로만 삽입 작업을 수행한다.
usingGeneratedKeyColumns(String... columnNames)
usingGeneratedKeyColumns 메소드는 데이터 삽입 시 데이터베이스에 의해 자동 생성되는 키 컬럼의 이름을 지정한다. 주로 자동 증가(auto-increment) 필드나 시퀀스(sequence)로부터 값을 얻는 필드에 사용된다.
이 메소드를 사용함으로써, SimpleJdbcInsert는 삽입 후 생성된 키 값을 반환할 수 있게 된다. 이는 executeAndReturnKey 메소드를 호출할 때 유용하다.
usingColumns(String... columnNames)
usingColumns 메소드는 삽입할 때 사용될 컬럼의 이름을 명시적으로 지정한다. 이는 삽입 작업에 포함될 필드를 제한할 때 유용하다.
만약 이 메소드를 사용하지 않는다면, SimpleJdbcInsert는 파라미터로 전달된 모든 필드를 삽입 작업에 포함시킨다. 하지만 특정 필드만 삽입하고자 할 때 이 메소드를 사용하여 삽입할 컬럼을 지정할 수 있다.
'Back-End > Spring' 카테고리의 다른 글
[Spring DB] MyBatis (0) | 2024.04.03 |
---|---|
[Spring DB] 데이터 접근 계층 테스트 (0) | 2024.04.02 |
[Spring DB] NamedParameterJdbcTemplate (0) | 2024.03.31 |
[Spring DB] JDBC Template (0) | 2024.03.29 |
[Spring MVC] 파일 업로드 (0) | 2024.03.25 |