Spring JDBC

    Spring / / 2020. 9. 12. 14:05

    JDBC의 반복적인 코드 문제를 해결하기 위해서 사용된다.

     

    Spring JDBC - 개발자가 해야 할 일

    Spring JDBC 패키지

     

    org.springframework.jdbc.core

    • JdbcTemplate 및 관련 Helper 객체 제공

    org.springframework.jdbc.datasource

    • DataSource를 쉽게 접근하기 위한 유틸 클래스, 트랜젝션매니져 및 다양한 DataSource 구현을 제공

    org.springframework.jdbc.object

    • RDBMS 조회, 갱신, 저장등을 안전하고 재사용 가능한 객제 제공

    org.springframework.jdbc.support

    • jdbc.core 및 jdbc.object를 사용하는 JDBC 프레임워크를 지원

     

    JDBC Template

    • org.springframework.jdbc.core에서 가장 중요한 클래스
    • 리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 한다.
    • 스테이먼트(Statement)의 생성과 실행을 처리한다.
    • SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행한다.
    • JDBC 예외가 발생할 경우 org.springframework.dao패키지에 정의되어 있는 일반적인 예외로 변환시킨다.

     

    실습코드

    JdbcTemplate select 예제1

    열의 수 구하기

    int rowCount = this.jdbcTemplate.queryForInt("select count(*) from t_actor");

    JdbcTemplate select 예제2

    변수 바인딩 사용하기

    int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt("select count(*) from t_actor where first_name = ?", "Joe"); 
    

    바인딩(Binding) 이란 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 것을 말한다.

    이름, 자료형, 자료값에 각각 num, int, 123 이라는 구체적인 값을 할당하는 각각의 과정을 바인딩이라고 한다.

     

    JdbcTemplate select 예제3

    String값으로 결과 받기

    String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?", new Object[]{1212L}, String.class); 
    

    JdbcTemplate select 예제4

    한 건 조회하기

    Actor actor = this.jdbcTemplate.queryForObject(
    
      "select first_name, last_name from t_actor where id = ?",
    
      new Object[]{1212L},
    
      new RowMapper<Actor>() {
    
        public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
    
          Actor actor = new Actor();
    
          actor.setFirstName(rs.getString("first_name"));
    
          actor.setLastName(rs.getString("last_name"));
    
          return actor;
    
        }
    
      }
      
      );

    JdbcTemplate select 예제5

    여러 건 조회하기

    List<Actor> actors = this.jdbcTemplate.query(
    
      "select first_name, last_name from t_actor",
    
      new RowMapper<Actor>() {
    
        public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
    
          Actor actor = new Actor();
    
          actor.setFirstName(rs.getString("first_name"));
    
          actor.setLastName(rs.getString("last_name"));
    
          return actor;
    
        }
    
      }
      
      );

    JdbcTemplate select 예제6

    중복 코드 제거 (1건 구하기와 여러 건 구하기가 같은 코드에 있을 경우)

    public List<Actor> findAllActors() {
    
      return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
    
    }
    
    private static final class ActorMapper implements RowMapper<Actor> {
    
      public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
    
        Actor actor = new Actor();
    
        actor.setFirstName(rs.getString("first_name"));
    
        actor.setLastName(rs.getString("last_name"));
    
        return actor;
    
      }
    
    }

    JdbcTemplate insert 예제

    INSERT 하기

    this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)",  "Leonor", "Watling");
    

    JdbcTemplate update 예제

    UPDATE 하기

    this.jdbcTemplate.update("update t_actor set = ? where id = ?",  "Banjo", 5276L);

    JdbcTemplate delete 예제

    DELETE 하기

    this.jdbcTemplate.update("delete from actor where id = ?", Long.valueOf(actorId));

     

     

    JdbcTemplate외의 접근방법

    NamedParameterJdbcTemplate

    SimpleJdbcTemplate

    • JdbcTemplate과 NamedParameterJdbcTemplate 합쳐 놓은 템플릿 클래스
    • 이제 JdbcTemplate과 NamedParameterJdbcTemplate에 모든 기능을 제공하기 때문에 삭제 예정될 예정(deprecated)
    • SimpleJdbcTemplate 예제

    SimpleJdbcInsert

     

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading