JdbcTemplate를 사용하여 DB의 정보를 가져올 때, query와 queryForObject를 사용하는데, 차이점을 간단하게나마 설명하겠다.
그렇다면 queryForObject의 사용 이유는 무엇일까?
단일 객체만 존재하는 것을 확인하고 싶은 경우 라고 할 수 있다.
이 발생한다.
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 계층에서 반환되는 값을 처리하게 하였다.