이전 글에서 자바 언어로 DB에 CRUD 를 수행하는 프로그램 작성하기를 살펴보았다. 스프링을 사용하면 DataSource, Connection, Statement, ResultSet 을 직접 사용하지 않고 JdbcTemplate 을 이용해서 편리하게 쿼리를 실행할 수 있다. DataSource를 직접 사용한 코드와 JdbcTemplate을 이용한 코드를 비교해보자.
다음 코드는 DataSource를 직접 사용한 JDBC 프로그래밍 코드이다.
package spring;
...
public class MemberDao {
private DataSource dataSource;
public MemberDao(DataSource dataSource) {
this.dataSource = dataSource;
}
public int count() {
Connection connection = null;
try {
connection = dataSource.getConnection();
try (
Statement stmt = connection.createStatement());
ResultSet resultSet = stmt.executeQuery(
"select count(*) from MEMBER")
) {
resultSet.next();
return resultSet.getInt(1);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
try { connection.close(); }
catch (SQLException e) {}
}
}
}
}
이번에는 JavaTemplate을 이용한 코드를 보자.
다음 코드는 앞서 등장한 MemberDao 에 스프링에서 제공하는 JdbcTemplate 을 적용한 것이다.
package spring;
...
public class MemberDao {
private JdbcTemplate jdbcTemplate;
public MemberDao(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public int count() {
Integer count = jdbcTemplate.queryForObject(
"select count(*) from MEMBER", Integer.class);
return count;
}
}
count() 함수를 보면, jdbcTemplate 을 사용했을 때 코드가 훨씬 깔끔해졌음을 알 수 있다.
이처럼 JdbcTemplate 을 사용하면 DataSource를 직접 사용하는 대신, JdbcTemplate 에게 DataSource를 주입해주고 JdbcTemplate 을 통해서 사용하게 된다.
그럼으로써 DataSource를 직접 사용할 때 써야만 했던 많은 코드들(이를테면 dataSource.getConnection(), resultSet.next(), stmt.close(), connection.close() 등등)이 JdbcTemplate의 몫으로 넘어간다.
이를 통해 count() 는 [Member 의 수를 구한다]는 본연의 역할에 충실하게 되었다.
'2021 Spring Study' 카테고리의 다른 글
Spring 16. 서블릿 & 서블릿 컨테이너 & spring MVC (0) | 2021.01.29 |
---|---|
Spring 15. Transaction Propagation (0) | 2021.01.21 |
Spring 13. DB 연동 (1) - JDBC 프로그래밍부터 알고 가자 (0) | 2021.01.20 |
Spring 12. AOP 프로그래밍 (3) - 포인트컷 표현식 (0) | 2021.01.13 |
Spring 11. AOP 프로그래밍 (2) - 스프링 AOP 구현 (0) | 2021.01.13 |