Java Category/Spring

[Spring DB] SimpleJdbcInsert

ReBugs 2024. 4. 1.

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

'Java Category > 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

댓글