Spring JDBC란?

Minkyeong Kim·2021년 11월 23일
0

[boostcourse] Web-Backend

목록 보기
30/55

Spring JDBC

  • JDBC 프로그래밍에는 반복되는 개발 요소 존재
  • 개발하기 지루한 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 패키지에 정의되어 있는 일반적인 예외로 변환시킴

JDBC Template 예제

select

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

  • SQL문에 변수 바인딩
    int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt("select count(*) from t_actor where first_name = ?", "Joe");

  • String형식으로 결과 받기
    String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?", new Object[]{1212L}, String.class);

  • queryForObject로 한 줄 가져와 객체로 반환

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;

    }
  });
  • query로 여러 행을 가져와 객체로 반환
  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;

    }
  });
  • 하나의 행부터 다수의 행까지 모두 가져올 수 있는 방식
    query 메소드의 인자로 ActorMapper클래스를 입력
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;

  }
}

update

  • insert
    this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)", "Leonor", "Watling");
  • update
    this.jdbcTemplate.update("update t_actor set = ? where id = ?", "Banjo", 5276L);
  • delete
    this.jdbcTemplate.update("delete from actor where id = ?", Long.valueOf(actorId));

0개의 댓글