[JavaWeb] 7장 DB를 활용해 데이터를 영구적으로 저장하기 - 2
7.2.1 요구사항
- JDBC에 대한 공통 라이브러리를 만들어 개발자가 SQL 쿼리, 쿼리에 전달할 인자, 조회한 데이터를 추출하는 3가지 구현에만 집중
- SQL Exception을 런타임 Exception으로 변환해 try/catch 절로 가독성을 해치지 않도록 해야함
7.2.2 요구 사항 분리 및 힌트
- 더 이상 JdbcTemplate은 특정 DAO 클래스에 종속적이지 않다. 이와 똑같은 방법으로 SelectJdbcTemplate을 생성해 반복 코드를 분리한다.
- JdbcTemplate과 SelectTemplate을 보니 중복 코드가 보인다. 또한 굳이 2개의 클래스를 제공하고 싶지 않다. JdbcTempate과 같은 한 개의 클래스만을 제공하도록 리팩토링 해본다.
- 위와 같이 SelectJdbcTemplate 클래스로 통합했을 때의 문제점을 찾아보고 이를 해결하기 위한 방법을 찾아본다.
- SQL Exception을 런타임 Exception으로 변환해 throw 하도록 한다.
- Connection, PreparedStatement 자원 반납을 close() 메소드를 사용하지 말고 try-with-resources 구문을 적용해 해결한다.
- SELECT 문의 경우 조회한 데이터를 캐스팅 하는 부분이 있다. 캐스팅하지 않고 구현하도록 개선 한다.
- 각 쿼리에 전달할 인자를 PreparedStatementSetter를 통해 전달할 수도 있지만 자바의 가변인자를 통해 전달할 수 있는 메소드를 추가한다
- UserDao에서 PreparedStatementSetter, RowMapper 인터페이스를 구현하는 부분을 JDK8에서 추가한 람다 표현식을 활용하도록 리팩토링 한다.