반응형

#김영한 #스프링 #Spring #인프런 #인프런수업


본 포스팅은김영한선생님의
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술
강의를 기반으로 작성되었습니다.

 

 

 

JdbcTemplate란?

JDBC를 좀더 쉽고 편리하게 사용할 수 있도록 도와주는 클래스이다
자바에서 데이터베이스에 접속한 뒤 SQL문을 실행하기 위한 API
순수 Jdbc와 동일한 환경설정을 하면 된다.
스프링 JdbcTemplate과 MyBatis 같은 라이브러리는
JDBC API에서 본 반복 코드를 대부분 제거해준다.
하지만 SQL은 직접 작성해야 한다.
실무에서도 자주 쓰는 방법이다

 

 

 

선언

Inject를 받을 수 있는건 아님으로 직접 선언해야한다
지금처럼 단일 인스턴스로 발생되는 경우 bean에 등록하지 않아도 된다 

private final JdbcTemplate jdbcTemplate;

@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource){
	jdbcTemplate = new JdbcTemplate(dataSource);
}

 

 

 

save()메소드 코드

public Member save(Member member) {  
    SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);  
    jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");  
    Map<String, Object> parameters = new HashMap<>();  
    parameters.put("name", member.getName());  
    Number key = jdbcInsert.executeAndReturnKey(new  
            MapSqlParameterSource(parameters));  
    member.setId(key.longValue());  
    return member;  
}

이 코드는 SimpleJdbcInsert를 사용하여 데이터베이스에 Member 객체를 저장하는 과정이다
SimpleJdbcInsert는 Spring에서 제공하는 클래스로,
JDBC를 사용하여 데이터베이스에 레코드를 삽입하는 작업을 간소화 한다

 

 

 

 

 

코드 설명

  1. SimpleJdbcInsert 인스턴스 생성
    SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
    • 여기서 SimpleJdbcInsert 객체는 jdbcTemplate를 사용하여 생성됩니다. jdbcTemplate는 Spring의 JDBC 작업을 쉽게 해주는 도구입니다.
  2. 테이블 이름 설정
    jdbcInsert.withTableName("member");
    • withTableName 메서드는 SimpleJdbcInsert가 삽입할 데이터베이스 테이블의 이름을 설정합니다. 여기서는 "member" 테이블에 데이터를 삽입하도록 지정하고 있습니다.
  3. 자동 생성 키 컬럼 지정
    jdbcInsert.usingGeneratedKeyColumns("id");
    • usingGeneratedKeyColumns 메서드는 데이터베이스에서 레코드 삽입 후 자동으로 생성되는 키(예: auto-increment ID)의 컬럼 이름을 지정합니다. 여기서는 "id" 컬럼이 자동 생성 키임을 나타냅니다.
  4. 삽입할 데이터 준비
    Map<String, Object> parameters = new HashMap<>();
    parameters.put("name", member.getName());
    • Map을 사용하여 삽입할 데이터를 준비합니다.
      Map의 키는 데이터베이스 컬럼 이름과 일치해야 합니다.
      Member 객체의 이름을 "name" 컬럼에 매핑하여 저장합니다.
  5. 데이터베이스에 삽입 및 키 반환
    Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
    • executeAndReturnKey 메서드는 MapSqlParameterSource를 사용하여 데이터베이스에 삽입을 실행하고, 자동 생성된 키를 반환합니다. MapSqlParameterSourceMap을 바탕으로 생성된 파라미터 소스입니다.
    • 이 메서드는 삽입된 레코드의 자동 생성된 키(id)를 Number 타입으로 반환합니다.
  6. 반환된 키로 Member 객체 업데이트
    member.setId(key.longValue());
    • 삽입된 레코드의 자동 생성된 키를 Member 객체의 ID로 설정합니다.
  7. 수정된 Member 객체 반환:
    return member;
    • 삽입 작업 후 업데이트된 Member 객체를 반환합니다.

 

 

주요 메서드 설명

  • withTableName(String tableName): 삽입할 데이터베이스 테이블의 이름을 설정합니다.
  • usingGeneratedKeyColumns(String… columnNames): 삽입된 레코드의 자동 생성된 키 컬럼 이름을 설정합니다. 이렇게 하면 삽입 후 해당 키를 검색하고 반환할 수 있습니다.
  • MapSqlParameterSource: Map에 저장된 데이터를 SqlParameterSource로 변환하는 데 사용됩니다. 이는 SimpleJdbcInsertexecuteAndReturnKey 메서드에 전달되어 실제 데이터베이스 삽입 작업에 사용됩니다.
  • executeAndReturnKey(SqlParameterSource parameterSource): 제공된 SqlParameterSource를 사용하여 데이터베이스에 삽입을 실행하고, 자동 생성된 키를 반환합니다.

 

 

 

SimpleJdbcInsert

이번 JdbcTemplate코드에서 SimpleJdbcInsert 이라는 참조클래스를 사용했다
이 클래스는 JDBC코듈에서 제공하는 클래스이며
데이터베이스에 새 레코드를 삽입하는 작업을 단순화하고 더 효율적으로 만들어준다
특징 : 자동 생성된 키를 반환한다. 많은 데이터베이스 삽입 작업 후 자동 생성된 키를 반활할 수 있다

SimpleJdbcInsert를 사용하면, SQL 쿼리를 작성할 필요 없이
간단하고 안전하게 데이터베이스에 데이터를 삽입할 수 있다.
새 레코드를 추가하는 작업이 자주 발생하는 애플리케이션에서 유용하다

`

반응형
유리쯔의일상