Spring JDBC 소개 - accidentlywoo/legacyVue GitHub Wiki
- 들어가기 전에 JDBC를 이용해서 프로그래밍을 하게 되면 반복적인 코드가 많이 발생합니다. 이러한 반복적인 코드는 개발자의 생산성을 떨어트리는 주된 원인이 됩니다. 이러한 문제를 해결하기 위해 등장한 것이 Spring JDBC입니다. 이번 시간엔 Spring JDBC에 대해 알아보도록 하겠습니다.
- Spring JDBC에 대한 개념을 이해합니다.
- Spring JDBC의 핵심 클래스와 인터페이스에 대해 이해합니다.
- JDBC Template
- RowMapper
- JDBC 프로그래밍을 보면 반복되는 개발 요소가 있습니다.
- 이러한 반복적인 요소는 개발자를 지루하게 만듭니다.
- 개발하기 지루한 JDBC의 모든 저수준 세부사항을 스프링 프레임워크가 처리해줍니다.
- 개발자는 필요한 부분만 개발하면 됩니다.
- org.springframework.jdbc.core
- org.springframework.jdbc.datasource
- org.springframework.jdbc.object
- org.springframework.jdbc.support
- org.springframework.jdbc.core에서 가장 중요한 클래스입니다.
- 리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 합니다.
- 스테이트먼트(Statement)의 생성과 실행을 처리합니다.
- SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행합니다.
- JDBC 예외가 발생할 경우 org.springframework.dao패키지에 정의되어 있는 일반적인 예외로 변환시킵니다.
JDBC Template Select 예제1
열의 수 구하기
int rowCount = this.jdbcTemplate.queryForInt("select count(*) from t_actor");
JDBC Template Select 예제2
변수 바인딩 사용하기
int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt("select count(*) from t_actor where first_name = ?", "Joe");
JDBC Template Select 예제3
String 값으로 결과 받기
String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?", new Object[]{1212L}, String.class);
JDBC Template Select 예제4 한 건 조회하기 `Actor actor = this.jdbcTemplate.queryForObject(
"select first_name, last_name from t_actor where id = ?",
new Object[]{1212L},
new RowMapper() {
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 actors = this.jdbcTemplate.query(
"select first_name, last_name from t_actor",
new RowMapper() {
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 findAllActors() {
return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper {
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");
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));
JDBC Template외의 접근방법
- NamedParameterJdbcTemplate
- SimpleJdbcTemplate
- SimpleJdbcInsert
- JDBC 프로그래밍이 불편해서 이를 해결하기 위해서 등장한 기술에는 Spring JDBC외에도 다양한 기술들이 존재합니다. 대표적으로 JPA와 MyBatis가 그러한 기술입니다. 문제를 해결하는 방법이 왜 여러 가지가 존재할까요?