템플릿/콜백 방식을 적용하지 않은 메서드에 JdbcTemplate 을 적용해보자

getCount()

SQL 쿼리를 실행하고 ResultSet 을 통해 결과 값을 가져오는 코드 ⇒ PreparedStatementCreator 콜백 + ResultSetExtractor 콜백을 파라미터로 받는 query() 메서드

템플릿/콜백의 동작 방식을 잘 생각해서 이해해보자

  1. PreparedStatementCreator 콜백은 템플릿으로부터 Connection 을 받고 PreparedStatement 를 돌려준다.
  2. ResultSetExtractor 는 템플릿으로부터 ResultSet 을 받고 거기서 추출한 결과를 돌려준다.
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 는 제네릭스 타입 파라미터를 갖는다.

public int getCount(){
  return this.jdbcTemplate.queryForObject("select count(*) from users", Integer.class);
}