[Java] JdbcTemplate 의 query vs queryForObject

김태훈·2023년 9월 1일
0
post-thumbnail

JdbcTemplate를 사용하여 DB의 정보를 가져올 때, query와 queryForObject를 사용하는데, 차이점을 간단하게나마 설명하겠다.

  1. query
    query는 기본적으로 반환형이 List이다. 즉, 한개 이상의 결과를 반환할 때 사용한다.
  2. queryForObject
    queryForObject의 반환형은 rowMapper 처리한 '단일' 객체이다. 즉 rowMapper 반환형의 객체 하나만 등장하는 것이다.

그렇다면 queryForObject의 사용 이유는 무엇일까?

단일 객체만 존재하는 것을 확인하고 싶은 경우 라고 할 수 있다.

  • query 실행 결과가 없으면, EmptyResultDataAccessException
  • query 실행 결과가 두개 이상이면, IncorrectResultSizeDataAccessException

이 발생한다.

queryForObject의 예시는 다음과 같다.

private Optional<CommentListDto> findById(Long commentId){
    String sql = "select id,author_id,author_image_path, author_name, likes, re_comments, comment_text, created_date, updated_date " +
                "from comment.info " +
                "where id = ?";
    try {
        return Optional.of(template.queryForObject(sql, commentRowMapper(), commentId));
    }catch(EmptyResultDataAccessException e){
        return Optional.empty();
    }
}

어차피 id는 PK 값이므로, 반환되는 결과의 개수는 1개, 아니면 0개이다.
따라서, 0개일 경우에 exception을 잡아서 Optional.empty() 로 반환하여 service 계층에서 반환되는 값을 처리하게 하였다.

profile
기록하고, 공유합시다

0개의 댓글