반응형

jdbcTemplate을 이용해서 select쿼리를 날리는 경우 .query 메소드를 사용하게 된다.


그런데 .query 메소드의 경우 List형태로 리턴을 해주기 때문에,

.queryForObject 메소드를 사용하는 경우도 있다.


다만, .queryForObject 메소드의 경우에는, row가 정상적으로 1개 나왔을 경우에는 문제가 없는데,

row가 아예 나오지 않는 경우에 대해 exception을 떨구게 된다.


이곳저곳 구글링을 해보면, try catch 문으로 exception을 캐치하여 null을 리턴하도록 하라고는 하는데,

try catch 문의 경우 성능 저하의 원인이 될 수 있기 때문에, 왠만해선 사용을 권장하지 않는다.


해결방안은, .query메소드를 사용하되, 단일 행이 나올 것이라고 예상되는 구문에서는

DataAccessUtils.singleResult나 DataAccessUtils.uniqueResult를 이용하여 List형태를 Object형태로 리턴하게끔 하면 된다.


메소드 구현체 내부를 들어가보면 알겠지만, .query 메소드의 결과로 나온 List의 사이즈를 체크하여,

사이즈가 0이면 null을 리턴하고, 사이즈가 0이 아니면 첫번재 element를 끄집어와서 리턴을 해주는 방식으로 되어 있다.

반응형
,