select 검색할때 파라미터를 리스트로 보내서 리스트에 있는 값을 하나하나씩 매핑시켜서 결과를 받을 때 유용한 쿼리죠.
예를 들면 어떠한 리스트에 있는 값을 통해 쿼리문을 생성한다던지 하는 경우 iBatis에서는 iterate 태그로 for문과 같은 역할을 하여 동적 쿼리를 생성 할 수 있습니다.
<select id="getData" parameterclass="java.util.List" resultclass="int"> SELECT count(0) FROM data_tb <iterate prepend="WHERE id IN" open="(" close=")" conjunction=","> #[]# </iterate> </select>
위와 같이 parameterClass를 java의 List 형태로 전달해 주면 동적쿼리를 생성할수 있습니다. 만약 list에 1,2,3,4 의 데이터가 들어가 있으면 결과적으로 다음과 같은 쿼리가 실행되는 것과 같습니다.
<select id="getData" parameterclass="java.util.List" resultclass="int"> SELECT count(0) FROM data_tb WHERE id IN (1,2,3,4) </select>
이렇게 iterate 를 사용하여 동적 쿼리문을 생성할 수 있습니다. 또한 parameterClass가 list형태가 아닌 Map이 List를 가지고 있는 형태도 iterate의 property 속성을 통해 접근할 수 있습니다.
만약 HashMap에 paramList라는 이름으로 list형이 들어가 있다고 가정하면
예)
HashMap<String, Object> paramMap = new HashMap<String, Object>();
List<Integer> paramList = new ArrayList<Integer>();
paramMap.put("paramList", paramList);
<select id="getData" parameterclass="HashMap" resultclass="result"> SELECT * FROM data_tb <iterate property="paramList" prepend="WHERE id IN" open="(" close=")" conjunction=","> #paramList[]# </iterate> </select>위와 같이 HashMap에 들어있는 list는 iterate의 property 속성을 통해 List를 가져 옵니다. ##사이는 HashMap에 put했던 list이름을 넣어주셔야 작동합니다.
'웹개발 > SQL' 카테고리의 다른 글
[Oracle] ORA-29275: 부분 다중 바이트 문자 (0) | 2018.05.08 |
---|---|
pl sql developer beautifier (0) | 2018.04.10 |
[iBatis] executeQueryForObject returned too many results - 에러 (0) | 2018.03.25 |
oracle에서 2개의 특정기간 사이의 데이터만 가져오고 싶을 때 (1) | 2018.01.03 |
[SQL] 오라클 ROWNUM, BETWEEN AND, TO_CHAR, LAG, LEAD, OVER, NVL, MAX (0) | 2017.12.28 |