![[Spring] JdbcTemplate DB 반복 작업 제거](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzhZSR%2FbtsmrEgvWtL%2FsCY35jLFX6MnqDHX1kROP0%2Fimg.png)
[Spring] JdbcTemplate DB 반복 작업 제거legacy/Spring2023. 7. 4. 14:03
Table of Contents
기존에 우리는 Jdbc를 통해 아래 과정을 거쳤다
- 커넥션 생성 및 동기화
- PreparedStatement 생성
- ResultSet 생성 (쿼리 실행 결과)
- SQLExceptionTranslator를 통해 체크 예외 -> 언체크 예외
- 리소스 반환(종료)
DB에 저장, 조회, 삭제, 수정 즉 CRUD를 수행할 때마다 반복적인 작업을 거쳤다.
JdbcTemplate은 위와 같은 반복 작업을 제거해준다.
JdbcTemplate 생성
JdbcTemplate 클래스는 생성자로 DataSource를 넘겨줘야 한다.
DataSource의 경우에는 Jdbc를 통하여 직접 가져오거나 커넥션풀을 사용하거나 해서 가져오면 된다.
(커넥션풀 구현체로 HikariCP를 주로 사용한다고 한다)
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource)
JdbcTemplate 사용 전
DB에 저장하는 메서드만 가져왔다.
아래 코드를 CRUD를 수행할 때마다 작성한다고 생각하면 매우 귀찮다.
public Member save(Member member) {
String sql = "insert into member(member_id, money) values(?, ?)";
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection(); // 커넥션 가져오기
pstmt = con.prepareStatement(sql); // PreparedStatement 생성
pstmt.setString(1, member.getMemberId());
pstmt.setInt(2, member.getMoney());
pstmt.executeUpdate(); // PreparedStatement(쿼리문) 실행
return member;
} catch (SQLException e) {
SQLExceptionTranslator exTranslator =
new SQLErrorCodeSQLExceptionTranslator(dataSource); // 예외 변환기
DataAccessException exception = exTranslator.translate("save", sql, e);
throw exception; // 예외 던지기
} finally {
close(con, pstmt, null); // 리소스 반환(종료)
}
}
JdbcTemplate 사용 후
커넥션, PreparedStatement, 예외 변환 등등 작업들이 모두 사라졌다.
무엇보다도 예외를 알아서 변환(체크 -> 언체크)해 주고 처리하는 것이 인상 깊었다.
public Member save(Member member) {
String sql = "insert into member(member_id, money) values(?, ?)";
jdbcTemplate.update(sql, member.getMemberId(), member.getMoney()); // JdbcTemplate 사용
return member;
}
결론
기존에 복잡한 작업들을 JdbcTemplate이 모두 알아서 처리해준다.
강의에서도 자주 듣는 말이지만
JdbcTemplate 기술을 무작정 사용하기 전에 해당 기술이 나오기 전에는 얼마나 불편했는지 스스로 느껴보는 것이 매우 중요한 것 같다.