ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 특정 쿼리문을 만족하는 Row가 있는지 조회하는 방법, queryForObject(), JdbcTemplate
    legacy/Spring 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 예외를 발생시키게 됩니다.

     

Designed by Tistory.