티스토리 뷰
Spring
[Spring] 특정 쿼리문을 만족하는 Row가 있는지 조회하는 방법, queryForObject(), JdbcTemplate
heemang.dev 2023. 8. 22. 21:52
본 글은 다크모드에 최적화되어 있습니다.
특정 쿼리문을 만족하는 row가 존재하는지 확인하기 위해서는 queryForObject() 메서드를 사용해야 합니다.
이 방법은 Jpa가 아닌 JdbcTemplate을 사용하는 경우에 해당합니다.
queryForObject
JdbcTemplate은 queryForObject() 메서드를 제공합니다. 오버로딩이 되어 있기 때문에 여러 개가 존재합니다.
<T> T queryForObject(String sql, Object[] args, Class<T> requiredType)
다음 상황을 가정해 봅시다. 책을 대출하려고 할 때 사용자의 이름과 책의 이름을 입력해야 합니다. 이때 사용자 이름이 등록되어 있는지 확인하려면 다음과 같이 코드를 작성할 수 있습니다.
public boolean existsByUserName(String userName) {
String sql = "SELECT EXISTS (SELECT * FROM user WHERE user_id = ?)";
Boolean result = jdbcTemplate.queryForObject(sql, new Object[]{userName}, Boolean.class);
return result;
}
또는 쿼리문을 만족하는 객체를 생성하여 반환할 수도 있습니다.
public User findByUserName(String userName) {
String sql = "SELECT * FROM user WHERE user_name = ?";
return jdbcTemplate.queryForObject(sql, (rw, rowNum) -> {
return new User(userName, null);
}, userName);
}
결론
JdbcTemplate이 제공하는 queryForObject() 메서드는 단건 조회를 제공하는 메서드입니다.
조회 결과로 2건 이상이 반환되면 IncorrectResultSizeDataAccessException 예외를 발생시키게 됩니다.