1. jdbcTemplate.query()
- 여러 개의 결과를 처리할 때 사용됨
- 결과가 여러 행일 때 유용
- 반환값이 List
List<Long> authorIds = jdbcTemplate.query("SELECT id FROM author WHERE email = ?", new Object[]{email}, new RowMapper<Long>() {
@Override
public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getLong("id");
}
});
2. jdbcTemplate.queryForObject()
- 단일 값을 반환할 때 사용됨
- 결과가 한 행일 때 유용
- 결과가 없거나 두 개 이상의 결과가 있으면 예외를 던짐
Long authorId = jdbcTemplate.queryForObject("SELECT id FROM author WHERE email = ?", new Object[]{email}, Long.class);
비교 정리
| query() | queryForObject() |
|---|
| 사용 목적 | 여러 행(Row) 조회 | 단일 값 조회 |
| 반환 타입 | List<T> | T (단일 값) |
| RowMapper 필요 여부 | 필요 (RowMapper<T>) | 기본 타입이면 필요 없음 |
| 결과 없음 | 빈 리스트([]) 반환 | EmptyResultDataAccessException 발생 |
| 결과가 2개 이상 | 모든 결과 반환 | IncorrectResultSizeDataAccessException 발생 |