동적쿼리를 생성해야 하는 경우는 상당히 많다.
이번에 ibatis를 처음 사용하면서 편하긴 하지만 알아야 할것도 참 많다고 생각이 드는데
아무튼 ibatis에서 리스트를 받아와 쿼리문에 foreach문 같은 반복문을 생성하도록 하려면
iterate를 사용해야 한다.
사용법은
<iterate property="measureTypeList" open="(" close=")" conjunction="or">
<![CDATA[ TYPE_ID =#measureTypeList[]#]]>
</iterate>
이런식으로 사용이 가능 하다.
property는 받아오는 리스트의 이름
open는 반복문이 시작할때 들어가는 텍스트
close는 그 반대
즉 저렇게 돌리면
(TYPE_ID =#measureTypeList[]# or TYPE_ID =#measureTypeList[]# or TYPE_ID =#measureTypeList[]#)
이런식으로 돌아간다 conjunction은 반복할때마다 들어갈 텍스트이다
그런데 저렇게 사용을 할때
outOfBoundsException 에러가 나는 경우가 있다!!!
컨트롤러에서 보내는 parameterClass를 리스트로 만들어서 보냈는데! 왜!!! 왜 안돼는걸까!
ArrayList<String> measureTypeList = new ArrayList<String>();
measureTypeList.add("MEASURE_TYP_117");
measureTypeList.add("MEASURE_TYP_118");
컨트롤러에서 저런식으로 만들어서 바로 파라메터로 보내버렸을때 발생하는 에러 이다
위의 에러를 해결하기 위해서는
만들어 놓은 리스트를 hash맵에 담아서 보내야 한다
HashMap measureTypeListMap = new HashMap();
measureTypeListMap.put("measureTypeList", measureTypeList);
이런식으로 해쉬맵에 담아서 보내면 에러가 해결이 된다.
<select id="WidgetTagDAO.measureTypeList" parameterClass="HashMap" resultMap="widgetTag">
<![CDATA[
SELECT*
FROM
where
]]>
<iterate property="measureTypeList" open="(" close=")" conjunction="or">
<![CDATA[ TYPE_ID =#measureTypeList[]#]]>
</iterate>
</select>
XML에서 작성하면 위와 같이 작성을 하면 된다.
'Yame Programmer > 전자정부프레임워크' 카테고리의 다른 글
ie , 익스플로러 ajax 버그 (이전 데이터를 계속 불러오는 버그) (0) | 2015.12.18 |
---|---|
이클립스 heap 힙메모리 , 속도향상 (0) | 2015.12.17 |
[이클립스]An error has occurred. See error log for more details. java.lang.AbstractMethodError (0) | 2015.06.05 |
[이클립스 스프링] 처음받은 프로젝트 실행시 404에러가 뜨는 경우 (5) | 2015.05.29 |
[이클립스,스프링]spring tooling update에러 XML파일 에러 (0) | 2015.05.28 |