JDBC 프로그래밍을 보면 반복되는 개발 요소가 있다.
JDBC 프로래밍을 하기 위해서는 드라이버를 로딩하고, 접속하고, statement 객체를 얻어내고, 쿼리문을 만들고 실행해서 결과가 있다면 결과를 받아내기 위한 result set 객체를 얻어와서 하나씩 결과들을 꺼내와야 한다. 그리고 열었던 순서 반대로 모듣 객체를 닫아주는 작업을 한다. 이러한 코드들을 매번 모든 기능을 수행할때 반복적으로 나오는 부분이다.
이러한 반복적인 요소는 개발자를 지루하게 만든다.
개발하기 지루한 JDBC의 모든 저수준 세부사항을 스프링 프레임워크가 처리해준다. 즉, 반복적인 코드들은 프로그래머가 만들지 않고, 스프링 JDBC가 대신 만들어준다. 개발자는 필요한 부분만 개발하면 된다.
Spring JDBC - 개발자가 해야할 일

Spring JDBC 패키지
| org.springframework.jdbc.core | JDBC 템플릿 클래스와 JDBC 템플릿의 다양한 콜백 인터페이스를 포함하고 있고, 추가로 여러가지 관련 클래스를 포함하고 있다. |
| org.springframework.jdbc.datasource | 데이터 소스에 접근을 쉽게 하는 유틸리티 클래스와 JAVA EE 컨테이너 외부에 수정되지 않고 운영되는 JDBC 코드와 테스트에서 사용할 수 있는 여러가지 간단한 데이터소스 구현체를 포함하고 있다. |
| org.springframework.jdbc.object | RDBMS의 조회, 갱신, 저장 프로시저를 쓰레드 세이프하고 재사용 가능한 객체로 나타내는 클래스를 포함하고 있다. |
| org.springframework.jdbc.support | SQL Exception 변환 기능과 유틸리티 클래스를 제공하고 있다. |
JdbcTemplate
- org.springframework.jdbc.core에서 가장 중요한 클래스
- 리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 한다.
- 스테이트먼트(Statement)의 생성과 실행을 처리한다.
- SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행한다.
- JDBC 예외가 발생할 경우 org.springframework.dao 패키지에 정의되어 있는 일반적인 예외로 변환시킨다.
JdbcTemplate select 예제
- 열의 수 구하기
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;
}
});
- 중복 코드 제거 (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");
- Update 하기
this.jdbcTemplage.update("update t_actor set=? where id=?", "Banjo", 5276L);
- Delete 하기
this.jdbcTemplage.update("delete from actor where id=?", Long.valueOf(actorId));
JdbcTemplate 외의 접근방법
- NamedParameterJdbcTemplate
- SimpleJdbcTemplate
- SimpleJdbcInsert
참고 : https://www.boostcourse.org/web316/lecture/20660?isDesc=false
웹 프로그래밍(풀스택)
부스트코스 무료 강의
www.boostcourse.org
'boostcource > boostcourse_web programming' 카테고리의 다른 글
| Spring JDBC 실습 (0) | 2024.06.30 |
|---|---|
| Spring JDBC를 이용한 DAO 개발 (0) | 2024.06.30 |
| xml파일을 이용한 설정-2 (0) | 2024.06.21 |
| xml 파일을 이용한 설정 (1) | 2024.06.16 |
| Spring IoC/DI 컨테이너 (0) | 2024.06.16 |