on
[토비의 스프링 3.1] 3장 템플릿
[토비의 스프링 3.1] 3장 템플릿
3장에서는 스프링에 적용된 템플릿 기법을 살펴보고, 이를 적용해 완성도 있는 DAO 코드를 만드는 방법을 알아본다.
템플릿이란?
바뀌는 성질이 다른 코드 중에서 '변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분'을 '자유롭게 변경되는 성질을 가진 부분'으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법
1. 다시 보는 초난감 DAO
DB 커넥션이라는 제한적 리소스를 공유해 사용하는 서버에서 동작하는 JDBC 코드에서는 반드시 예외처리 원칙을 지켜야 한다. 사용한 리소스를 반드시 반환하도록 만들어야 한다.
JDBC 수정 기능의 예외처리 코드
DB 풀은 getConnection()으로 가져간 커넥션은 명시적으로 close() 해서 돌려줘야지만 다시 풀에 넣었다가 다음 커넥션 요청이 있을 때 재사용할 수 있다.
close()는 리소스를 반환한다는 의미, 만들어진 순서의 반대로 하는 것이 원칙이다.
try/catch/finally 구문 사용
예외상황에서도 리소스를 반환하는 deleteAll()
public void deleteAll() throws SQLException { Connection c = null; PreparedStatement ps = null; try { //예외가 발생할 수 있는 코드를 try 블록으로 묶어준다. c = dataSource.getConnection(); ps = c.prepareStatement("delete from users"); ps.executeUpdate(); } catch (SQLException e) { //예외가 발생했을 때 실행되는 부분 throw e; } finally { //무조건 실행되는 부분 if(ps != null) { //ps가 null일때 close()를 호출하면 NullPointerException이 발생 try { ps.close(); } catch(SQLException e) { //close() 메소드 사용시 에러가 발생했을 경우 } } if(c != null) { try { c.close(); } catch(SQLException e) { } } } }
JDBC 조회 기능의 예외처리
Connection, PreparedStatement 외에도 ResultSet도 반환해야 한다.
2. 변하는 것과 변하지 않는 것
from http://gogumi-log.tistory.com/14 by ccl(A) rewrite - 2021-12-14 16:01:50