티스토리 뷰

본 글은 다크모드에 최적화되어 있습니다.

 

특정 쿼리문을 만족하는 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 예외를 발생시키게 됩니다.

 

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30