메뉴 건너뛰기

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>

 

번호 제목 날짜 조회 수
121 거침없이 배우는 Drools 책의 샘플소스 file 2016.07.22 1369
120 자주쓰는 유용한 프로그램 2018.03.16 1385
119 우분투 root 패스워드 설정하기 2013.03.04 1395
118 Oozie 설치, 환경설정 및 테스트 2014.04.08 1405
117 lagom-linux용 build.sbt파일 내용 2017.10.12 1417
116 crypto관련 기생충 박멸 스크립트 2018.05.11 1421
115 solr vs elasticsearch 비교2 2014.09.29 1432
114 mysql에서 외부 디비를 커넥션할 경우 접속 속도가 느려질때 2017.06.30 1437
113 avro 사용하기(avsc 스키마 파일 컴파일 방법, consumer, producer샘플소스) 2016.07.08 1458
» Mybatis foreach 문법정리(상황에 따른 사용법) 2015.11.10 1465
111 build.gradle을 pom.xml로 변환하는 방법 2016.08.18 1483
110 ubuntu 커널 업그레이드 방법 2018.09.02 1486
109 resouce manager에 dr.who가 아닌 다른 사용자로 로그인 하기 2018.06.28 1487
108 The disk drive for uuid= is not ready yet or not present 오류 해결방법 2014.04.21 1501
107 apt-get install mysql-server수행시 "404 Not Found" 오류발생시 조치방법 2014.09.10 1507
106 마이바티스(MyBatis)쿼리로그 출력및 정렬하기 2015.12.01 1546
105 hiverserver2기동시 connection refused가 발생하는 경우 조치방법 2014.05.22 1560
104 ExWordCount jar파일 file 2013.03.06 1563
103 FAILED: IllegalStateException Variable substitution depth too large: 40 오류발생시 조치사항 2014.08.19 1597
102 sqoop에서 oracle관련 작업할때 테이블명, 사용자명, DB명은 모두 대문자로 사용할것 2014.05.15 1599
위로