메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


Mybatis foreach 문법

 

<foreach collection="param.place" item="place"   open="(" close=")" separator="or">
      sh.SNA_SHOW_KIND_IDX = ${place}
</foreach>
collection = 전달받은 인자값
item   = 전달받은 인자값을 다른이름으로 대체
open 해당 구문이 시작할떄 (
close 해당구문이 끝날떄
separator  한번 이상 반복할때 반복되는 사이에  해당 문을 넣어줌
 
note: "collection"파라미터 객체로 MyBatis 에 List 인스턴스나 배열을 전달 할 수 있다. 그렇게 하면 MyBatis는 Map으로 자동으로 감싸고 이름을 키로 사용한다. List 인스턴스는 'LIST' 를 키로 사용하고, 배열 인스턴스는 'array'를 키로 사용한다.
<select id="..." parameterType="..." resultType="Map">
    select * from test
    <where>
        name in
        <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
            #{item.value}
        </foreach>
    </where>
</select>

mybatis user guide를 보면 foreach의 경우 list나 array 타입을 collection으로 설정할 수 있으며 이때 list나 array 데이터는 map으로 타입이 변환되어 저장된다고 함

list를 사용할 경우 (변수 이름은 list가 아니어도 됨)


List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

 

<!-- collection 속성 값은 반드시 list나 array만 설정해야 함 -->
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
    #{item.value}
</foreach>

value 속성을 사용한 것으로 보아 Map.Entry.getValue 메서드를 호출하는 것이 아닐까 하는데...


array를 사용할 경우(변수 이름은 array가 아니어도 됨)

String[] array = new String[] { "a", "b", "c" };

<!-- collection 속성 값은 반드시 list나 array만 설정해야 함 -->
<foreach collection="array" item="item" index="index" separator="," open="(" close=")">
    ${array[index]}
</foreach>
 

select의 parameterType이 map이나 java 오브젝트라면 collection 값에 속성 이름을 설정하면 됨

parameterType="Map"인경우


Map<String, Object> map = new HashMap<String, Object>();
map.put("friendList', list);

<select id="..." parameterType="Map" ...>
    <foreach collection="friendList" .../>
</select>

 

parameterType="{Java object}"인 경우


SomeJavaClass pojo = new SomeJavaClass();
pojo.setEnemyList(list);

<select id="..." parameterType="SomeJavaClass" ...>
    <foreach collection="enemyList" .../>
</select>

 

번호 제목 날짜 조회 수
641 [vue storefrontui]외부 API통합하기 참고 문서 2022.02.09 80
640 vuestorefrontui.io를 이용한 front end project 생성하기 2022.02.06 137
639 eclipse editor 설정방법 2022.02.01 203
638 windows10 pro에서 microservice pattern책의 예제를 kubernetes에서 기동하는 방법 2022.01.30 150
637 [백업] 리눅스 시스템 백업하기 (Linux System Backup) - TAR 사용 시스템 전체 백업 2022.01.19 1113
636 kudu rebalance수행 command예시 2022.01.17 218
635 Kudu tablet이 FAILED일때 원인 확인 방법 2022.01.17 555
634 Failed to write to server: (no server available): 2022.01.17 737
633 Soft memory limit exceeded (at 100.05% of capacity) 오류 조치 2022.01.17 515
632 not leader of this config: current role FOLLOWER 오류 발생시 확인방법 2022.01.17 695
631 Oracle NLOB type의 데이터를 import하는 경우 No Java type for SQL type 2011 for column rst와 같은 오류 발생시 조치사항 2022.01.14 135
630 kudu 테이블 metadata강제 삭제시 발생하는 오류 메세지 2022.01.12 571
629 hadoop nfs gateway설정 (Cloudera 6.3.4, CentOS 7.4 환경에서) 2022.01.07 404
628 oracle 12에 sqoop해서 데이터 import하기 (console에서 sqoop import하는 방법) 2021.12.31 604
627 python2.7.4에서 Oracle DB(11.2)를 사용하기 위한 설정(RPM을 이용하여 RHEL 7.4에 설치) 2021.11.26 602
626 클러스터내의 전체 workflow및 coordinator현황을 사용자별로 추출하는 방법 2021.11.25 558
625 hue.axes_accessattempt테이블의 username컬럼에 NULL 혹은 space가 들어갈수도 있음. 2021.11.03 3051
624 Query Status: Sender xxx.xxx.xxx.xxx timed out waiting for receiver fragment instance: 1234:cdsf, dest node: 10 의 오류 원인및 대응방안 2021.11.03 367
623 hive metastore db중 TBLS, TABLE_PARAMS테이블 설명 2021.10.22 611
622 kudu hms check 사용법(예시) 2021.10.22 447
위로