템플릿/콜백 방식을 적용하지 않은 메서드에 JdbcTemplate 을 적용해보자
SQL 쿼리를 실행하고 ResultSet 을 통해 결과 값을 가져오는 코드 ⇒ PreparedStatementCreator 콜백 + ResultSetExtractor 콜백을 파라미터로 받는 query() 메서드
템플릿/콜백의 동작 방식을 잘 생각해서 이해해보자
public int **getCount()** throws SQLException {
**return** this.jdbcTemplate.query(**new PreparedStatementCreator()** {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement("select count(*) from users");
}
}, **new ResultSetExtractor<Integer>()**{
@Override
public Integer extractData(ResultSet rs) throws SQLException, DataAccessException {
rs.next();
return rs.getInt(1);
}
});
}
getCount() 메서드에 있던 코드 중에서 변하는 부분만 콜백으로 만들어져서 제공
ResultSetExtractor 는 제네릭스 타입 파라미터를 갖는다.
콜백에 지정한 타입은 제네릭 메소드에 적용되어 query() 템플릿의 리턴 타입도 함께 바뀐다.
jdbcTemplate.queryForInt
(”SQL …”); Deprecated
public int getCount(){
return this.jdbcTemplate.queryForObject("select count(*) from users", Integer.class);
}