Back-End/Spring

[Spring DB] SimpleJdbcInsert

seungwook_TIL 2024. 4. 1. 00:18

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는 파라미터로 전달된 모든 필드를 삽입 작업에 포함시킨다. 하지만 특정 필드만 삽입하고자 할 때 이 메소드를 사용하여 삽입할 컬럼을 지정할 수 있다.