11.2.2. NamedParameterJdbcTemplate
이전 글에서 JdbcTemplate을 사용하여 쿼리를 작성할 때 ? 를 사용하였는데요. 쿼리에 필요한 파라미터가 여러개 라면 ? 의 순서를 신경써야 하는 단점이 생깁니다.
이때 JdbcTemplate 클래스를 감싸고 있는 NamedParameterJdbcTemplate 클래스를 사용하면 됩니다.
getJdbcOperations() 메소드를 사용해서 감싸고 있는 JdbcTempate 객체를 받아와서 사용할 수 있습니다.
public void setDataSource(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(0) from T_ACTOR where first_name = :first_name";
SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);
return namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
}
: 를 사용해서 ? 대신 sql의 파라미터에 이름을 줄 수 있습니다.
SqlParameterSource에는 위의 예제에 있는 MapSqlParameterSource와 아래 예제에 있는 BeanPropertySqlParameterSource 가 있습니다.
// notice how the named parameters match the properties of the above 'Actor' class
String sql = "select count(0) from T_ACTOR where first_name = :firstName and last_name = :lastName";
SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);
return this.namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
}