Kim VamPa

[MyBatis] <foreach> 사용법 본문

공부/데이터베이스

[MyBatis] <foreach> 사용법

Kim VamPa 2021. 3. 8. 10:51
728x90
반응형

목표

 

MyBatis에서 사용하는 <foreach> 사용법

 <foreach>를 왜 사용하고 어떻게 사용하는지를 알아봅니다.

 

 

순서

1. <foreach> 이해

2. 예제

 

 

1. <foreach>

 전달받은 collection 인자 값을 바탕으로 반복적인 SQL 구문을 작성할 때 사용합니다. 주로 데이터 타입이 동일한 다수의 배열 데이터를 검색조건에 반영해야 할 때, OR 또는 IN 구문에서 많이 사용합니다.

 

 <foreach>의 속성 다음 6가지가 있습니다.

 

1) collection 속성 - 전달받은 인자를 속성값으로 삽입합니다. Map, Array, List, Set 등과 같은 반복 가능한 객체를 전달할 수 있습니다.

 

2) item 속성 - collection속성에서 전달받은 collection 인자값을 대체할 '이름'을 속성 값으로 삽입합니다.

 

3) open 속성 - 구문이 시작될때 삽입할 문자열을 속성 값으로 삽입합니다.

 

4) close 속성 - 구문이 종료될때 삽입할 문자열을 속성 값으로 삽입합니다.

 

5) separator 속성 - 반복되는 구문 사이에 삽입할 문자열을 속성값으로 삽입합니다.

 

6) index 속성 - index값을 부를 일종의 변수명을 속성값으로 삽입합니다. 태그 내에 #{index}를 통해 호출할 때 0부터 반환됩니다.

 

 

2. 예제

 


전달받은 배열
Java 코드
int[] bnoArr = {1,2,3,4,5};
public List<BoardVO> getList(int[] bnoArr) throws Exception;
=> getList(bnoArr);


<select id="getList" resulttype="BoardVO">
	select bno, title, content, writer from tbl_board where bno IN
    
    <foreach item="bno" collection="bnoArr" open="(" close=")" separator=",">
    	#{bno}
    </foreach>
</select>


결과 쿼리
	select bno, title, content, writer from tbl_board where bno IN (1,2,3,4,5)

 


String typeArr = {T,C}
public List<BoardVO> getList(String[] arr, String keyword) thorws Exception;
=> getList(typeArr,keyword);

<select id="getList" resulttype="BoardVO">
	select bno, title, content, writer from tbl_board where 
    <trim prefixOverrides="OR">
      <foreach item="type" collection="typeArr">
          <trim prefix="OR">
              <choose>
                  <when test="type == 'T'.toString()">
                      title like '%'||#{keyword}||'%'
                  </when>
                  <when test="type == 'C'.toString()">
                      content like '%'||#{keyword}||'%'
                  </when>
                  <when test="type == 'W'.toString()">
                      writer like '%'||#{keyword}||'%'
                  </when>
              </choose>
          </trim>
      </foreach>
    </trim>
</select>


결과 쿼리
	select bno, title, content, writer from tbl_board where
    title like '%'||#{keyword}||'%' OR content like '%'||#{keyword}||'%'

 

REFERENCE

 

DATE

  • 2020.03.08
728x90
반응형
Comments