Spring으로 프로젝트를 진행중에 있는데, queryForObject에 대해 공부한것을 정리해보려 한다.
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
처음에 짠 코드인데 Member 테이블에서 "ID"는 unique한 컬럼이다.
그렇다면 최대 단일 행이 조회되는것인데, List 객체를 반환하는것이 의미가 없는것이다.
이러한 이유들로 queryForObject를 사용하는것이 좋다고 한다.
그런데, 하나 더 유의할게 있었다.
최대 단일 행 반환이지, 일치하는 ID가 데이터베이스에 없다면 반환할 객체가 없다.
queryForObejct는 반환할 객체가 1개가 아니면 에러가 발생한다.

0개의 행이 반환되면 EmptyResultDataAccessException,
1개 초과일 경우 IncorrectResultSizeDataAccessException가 발생한다.
public Optional<Member> findByID(String id) {
try {
Member member = jdbcTemplate.queryForObject("select * from member where id = ?", memberRowMapper(), id);
return Optional.of(member);
} catch (EmptyResultDataAccessException e) {
return Optional.empty();
}
}
그렇기에 해당 코드처럼 try catch문을 사용해 에러 처리를 해줬다.