[Java]queryForObject

우니·2023년 9월 28일
0

서론

Spring으로 프로젝트를 진행중에 있는데, queryForObject에 대해 공부한것을 정리해보려 한다.

 List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);

처음에 짠 코드인데 Member 테이블에서 "ID"는 unique한 컬럼이다.
그렇다면 최대 단일 행이 조회되는것인데, List 객체를 반환하는것이 의미가 없는것이다.

사용 이유

  • 단일 행 반환이기에 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문을 사용해 에러 처리를 해줬다.

0개의 댓글