[부스트코스 웹] Spring JDBC

June·2021년 1월 7일
0

부스트코스

목록 보기
18/23

Spring JDBC

  1. JDBC 프로그래밍을 보면 반복되는 개발 요소가 있다.
  2. 이러한 JDBC의 모든 저수준 세부사항을 스프링 프레임워크가 처리해준다.

JdbcTemplate

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

JdbcTemplate select 예제 1

  • 열의 수 구하기
    int rowCount = this.jdbcTemplate.queryForInt("select count(*) from t_actor");

  • 변수 바인딩 사용하기
    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);

  • 한 건 조회하기

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;
        }
    });
  • 여러 건 조회하기
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;
    }
  });
  • 중복 코드 제거
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;
  }
}
  • INSERT 하기
this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)",  "Leonor", "Watling");
  • JdbcTemplate 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개의 댓글