본문 바로가기
Programming/ibatis + mybatis

ibatis 문법(iterator, iterate)

by 막이 2014. 3. 3.

<select id="select.dynamic.query" resultMap="map"    

    parameterClass="map" >  

  SELECT * FROM EMP

  <dynamic prepend="WHERE">  

    <iterate property="empno"    

    conjunction="," open="EMPNO IN (" close=")" >  

    #empno[]#    --여러개의 값이 들어가므로 []를 빼먹으면 안된다.

    </iterate>  

  </dynamic>  

</select>

 

resultMap과  parameterClass 값은 무시하도록 한다.

 

결과 SQL > empno에 값이 (`123`,`234`,`345`....)이 있다는 가정하에

  SELECT * FROM EMP

  WHERE EMPNO IN (`123`,`234`,`345`,.....)

 

 

설명 > <iterate>는 propend의 값만큼 반복수행한다고 생각하면 된다.

           SQL를 반복 수행할때 open의 값을 넣어주고 반복되는 SQL를 실행한다음에 CLOSE의 값을 넣어주어서 하나의 SQL를 만든다.

           그리고 conjunction의 값은 반복되는 값들의 구분자를 지정해 주는 옵션인다.

 

예> no = ['월','화','수','목','금','토','일']

    옵션값 : property="no" open="[시작 " close=" 끝]" conjunction="/"

    결과값 : [시작 월//////일 끝]



분류(checkbox) 로 검색해서 자료를 검색하려고 사용했다..

 <isNotEmpty property="srchCategorySeqs">

       <iterate prepend="AND CM.CS_CATEGORY_SEQ  IN" open="(" close=")" conjunction="," property="srchCategorySeqs">

      #srchCategorySeqs[]#

  </iterate>

 </isNotEmpty>


<c:forEach var="row" items="${listCategory}" varStatus="i">

<label for="searchCheck${i.count }" class="searchCk"><input type="checkbox" id="searchCheck${i.count }" name="srchCategorySeqs" value="<c:out value="${row.category.categorySeq}"/>"

<c:forEach var="rowSub" items="${condition.srchCategorySeqs}" varStatus="j">

<c:if test="${condition.srchCategorySeqs[j.count-1] eq row.category.categorySeq}">

     checked

</c:if>

</c:forEach>

><c:out value="${row.category.title}"/>

</label>

</c:forEach>


선택된 분류가 check 되있게