jdbc+Template 즉, 직역하면 "jdbc를 위한 틀"이라는 뜻이다.
그만큼 jdbc 프로그래밍에 특화되어 있다는 것 일텐데, 어떤 점이 더 좋다는 걸까? 한번 알아보자
지금 설명하기는 좀 곤란하다.
이 내용을 다 이해할 때쯤 아마 완전히 이해할 것이다.
우선 맛보기로 오리지널과 Spring을 비교해보자.
/* 오리지널 JDBC */
// 결과값을 담기위한 User 리스트
List<User> userList = new ArrayList<>();
// SELECT 구문 작성
String sql = "SELECT * from USER";
// 조회하기
Statement stat = conn.createStatement();
ResultSet rs = stat.excuteQuery(sql);
// 결과값 가져오기
while(rs.next()) {
// user 객체에 값 저장
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setDescription(rs.getString(3));
// 리스트에 추가
userList.add(user);
}
// 순서대로 닫기
rs.close();
stat.close();
conn.close();
반면 Spring은 다음과 같다.
// 한개 출력하기
jdbcTemplate.queryForObject(인자1, 인자2, 인자3);
// 여러개 출력하기
jdbcTemplate.query(인자1, 인자2, 인자3);
이만큼이나 간편해지는구나!라고만 알고 넘어가자.
오리지널 JDBC가 Connection 객체가 필요했듯이,
Spring JDBC는 DataSource를 필요로 한다.
따라서 jdbcTemplate에 DataSource를 전달해준다.
/* 준비 작업 */
// template 정의
private JbdcTemplate jdbcTemplate;
// DataSource 전달
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JbdcTemplate(dataSource);
}
메서드는 물론 여러가지가 있지만, 여기서는 2가지만 알아보겠다.
사용법은 다음과 같다.
Object jdbcTemplate.queryForObject(SQL구문, 반환 타입, 인자);
(단 반환 타입은 기본형 Class만 가능!)
1. SQL 구문
: 말 그대로 SQL 구문을 말한다.
2. 반환 타입
: 어떤 타입으로 반환할 건지를 선택한다. 단, 데이터 형만 가능하다.
(Long, Integer, String 등)
3. 인자
: SQL 구문에 필요한 인자를 여따 넣는다.
예시를 들면, 다음과 같다.
String name = jdbcTemplate.queryForObject(
"SELECT name FROM USER WHERE id=?",
String.class,
1000L);
id가 1000인 String형 name을 출력하는 SELECT 쿼리를 날린다는 뜻이다.
반환형이 기본 클래스만 된다는 것이 이해가 가질 않는다.
그럼 다른 클래스를 반환받는건 포기해야할까?
그렇지 않다.
그걸 위한 인터페이스가 있는데, 바로 RowMapper라고 한다.
이것에 대해선 다음 시간에 알아보자.