본문 바로가기
프로그래밍/JDBC Template

[JDBC Template] JDBC Template query()와 queryForObject()

by 노잼인간이라불립니다 2022. 8. 9.

프로젝트를 진행하다가 JDBC Template을 이용해야 하는 일이 생겼다.

 

평소에 JDBC Template은 사용하지 않았던 터라 모든 것이 낯설었지만, 그래봤자 CRUD 아니겠는가.... 배우면서 진행하였다.

 

그 중에서도 오늘 비슷하면서도 다른 query()와 queryForObject()에 대해 기록해 두려한다.

 

1. queryForObject (String sql, new RowMapper<리턴받을타입>,?에 넣어줄 파라미터)  - 단건 조회 시 사용

2. query(String sql, new RowMapper<리턴받을 타입>, ?에 넣어줄 파라미터)     - 복수건 조회 시 사용

  

2개의 메서드를 살펴보면 메서드명만 다를 뿐 넣어주는 변수도 모두 동일하고, 비슷한 점이 많다.

 

정리

 일단 모두 db select가 필요할 때 사용하게 된다. 그러나 둘의 다른점은 하나는 주로 단건 조회시 사용, 다른 하나는 주로 복수건 조회 시 사용한다는 점이었다.

 

 그러나 나의 업무는 조회를 했을 때 그 값이 null인 녀석들을 찾는 것이 었다. queryForObject 같은 경우에 단건 조회가 이루어 지게 되는데, 결과값이 o이거나 2이상이게 된다면 바로 오류가 발생한다고 한다.

 

 그러나 query 메서드는 다르다. query는 List의 형태로 받기 때문에 List가 비어 있어도 오류가 발생하지 않는다. 

 

마지막정리 :  그러므로 Optional값, 즉 null값인 경우를 체크하는 로직이 필요할 경우에는 queryForObject를 사용하면 안된다. 0이하 또는 2이상일 때 queryForObject는 에러를 발생시키므로, 꼭 query메서드를 사용해야 한다.