본문 바로가기
Progamming/BoostCourse

Spring JDBC 소개

by 동그란 혜주 2019. 3. 13.
  • 들어가기 전에

JDBC를 이용해서 프로그래밍을 하게 되면 반복적인 코드가 많이 발생한다. 이러한 반복적인 코드는 개발자의 생산성을 떨어트리는 주된 원인이 된다. 이러한 문제를 해결하기 위해 등장한 것이 Spring JDBC




  • 학습 목표

1. Spring JDBC에 대한 개념을 이해한다.

2. Spring JDBC에 핵심 클래스와 인터페이스에 대해 이해한다.




  • 핵심 개념

- JDBCTemplate

- RowMapper




  • Spring JDBC

- JDBC 프로그래밍을 보면 반복되는 개발요소가 있다.

- 이러한 반복적인 요소는 개발자를 지루하게 만든다.

- 개발하기 지루한 JDBC의 모든 저수준 세부사항을 스프링 프레임워크가 처리해준다.

- 개발자는 필요한 부분만 개발하면 된다.




Spring JDBC 개발자가 해야 할 일은?





  • Spring JDBC 패키지

- org.springframework.jdbc.core : JDBC Template 클래스와 다양한 콜백 인터페이스 및 관련 Helper 객체 제공

- org.springframework.jdbc.datasource : DataSource를 쉽게 접근하기 위한 유틸 클래스, 외부에 수정되지 않고 운영되는 JDBC 크드와 트랜젝션매니져 및 테스트레어 사용할 수 있는 여러가지 간단하고 다양한 DataSource 구현을 제공

- org.springframework.jdbc.object : RDBMS 조회, 갱신, 저장 프로시저를 스레드 세이프하고 재사용 가능한 객제 제공

- org.springframework.jdbc.support : SQL Exceptio 변환 기능과 JDBC.core 및 JDBC.object를 사용하는 JDBC 프레임워크를 지원




  • JDBC Template

- org.springframework.jdbc.core에서 가장 중요한 클래스입니다.

- 리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 합니다.

- 스테이먼트(Statement)의 생성과 실행을 처리합니다.

- SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행합니다.

- JDBC 예외가 발생할 경우 org.springframework.dao패키지에 정의되어 있는 일반적인 예외로 변환시킵니다.




  • JDBC Template select 예제

- 열의 수 구하기 

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

- 변수 바인딩 사용하기

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

- String 값으로 결과 받기

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

- 한 건 조회하기

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;
        }
  });
cs

- 여러 건 조회하기

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;
        }
  });
cs

- 중복 코드 제거 (한 건 조회하기와 여러 건 조회하기가 같은 코드에 있을 경우)

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;
    }
}





  • JDBC Template insert 예제

- INSERT 하기

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


- UPDATE 하기

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

cs


- DELETE 하기

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




  • JDBC Template 외의 접근 방법

- NamedParameterJdbcTemplate

· JdbcTemplate에서 JDBC statement 인자를 ?를 사용하는 대신 파라미터명을 사용하여 작성하는 것을 지원

· https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#jdbc-NamedParameterJdbcTemplate


- SimpleJdbcTemplate

· JdbcTemplate과 NamedParameterJdbcTemplate 합쳐 놓은 템플릿 클래스

· 이제 JdbcTemplate과 NamedParameterJdbcTemplate에 모든 기능을 제공하기 때문에 삭제 예정될 예정(deprecated)

· https://www.concretepage.com/spring/simplejdbctemplate-spring-example


- SimpleJdbcInsert

· 테이블에 쉽게 데이터 insert 기능을 제공

· https://www.tutorialspoint.com/springjdbc/springjdbc_simplejdbcinsert.htm

'Progamming > BoostCourse' 카테고리의 다른 글

Spring MVC란?  (0) 2019.03.14
Spring JDBC 실습  (0) 2019.03.13
Java Config를 이용한 설정  (0) 2019.03.13
XML 파일을 이용한 설정  (0) 2019.03.13
Spring IoC/DI 컨테이너  (0) 2019.03.13

댓글