개발공작소
article thumbnail
728x90

 

 

 

 

쿼리문을 작성하다보면 반복적인 작업을 해야 할 때가 있다. 예를 들면 테이블 안의

데이터와 하나하나 비교를 한다던가. 파라메터 값을 포함하고 있는 데이터를 갖고 오고 싶을 때

마이바티스의 forEach문법을 사용하면 java의 for과 같이 반복적으로 쿼리를 작성 할 수 있다.

 

바로 알아보도록 하자.

 

 

기본문법

<foreach item="[value]" collection="[array]" open="[시작값]" separator="[구분자]" close="종료값">
    [실제 실행할 쿼리]
</foreach>

 

 

간단하다. 그냥 forEach 태그에 필요 옵션들을 추가해 사용하면 된다. 각 옵션에 대한 설명은 다음과 같다.

 

collection : 전달받은 인자/변수 즉, list 같은 배열 형식의 변수
item : 배열에서의 값 하나하나를 의미한다. 즉 value값을 의미
index : 현재 for문을 돌고있는 index를 의미한다.(0,1,2,3, ...)
open : foreach문이 시작될때 앞에 삽입될 문자열
separator : foreach문에서 반복되는 값 사이사이에 넣어줄 문자열
close : foreach문이 종료될때 앞에 삽입될 문자열

 

샘플 테이블 및 데이터

CREATE TABLE mochi.RECURSIVE_BOOK(
    BOOK_ID INTEGER NOT NULL,
    PARENT_ID INTEGER,
    BOOK_NAME CHARACTER VARYING(50) NOT NULL,
    BOOK_QTY INTEGER,
	CONSTRAINT BOOK_KEY PRIMARY KEY (BOOK_ID));
    
    
INSERT INTO mochi.RECURSIVE_BOOK VALUES (101, null, '도서', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (102, 101, '과학책', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (103, 101, '역사책', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (104, 101, '잡지', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (105, 102, '달나라_여행', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (106, 102, '내셔널지오그래픽_동물사전', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (107, 102, '블랙홀은_존재하는가', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (108, 106, '독화살개구리의_생존', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (109, 106, '오리너구리의_비밀', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (110, 104, '90년대_오렌지족_패션', 1);
INSERT INTO mochi.RECURSIVE_BOOK VALUES (111, 103, '6.25전쟁의_진실', 1);

 

샘플코드

 

testMapper.java

public void forEachTest() {
	//testList 배열에 테스트값을 넣어 파라메터로 넘겨줌
    String[] testList = {"내셔널지오그래픽_동물사전","역사책", "오리너구리의_비밀", "6.25전쟁의_진실"};
    List<Object> resultList = session.selectList("dao.Inquiry.forEachTest", testList);
    System.out.println(resultList);
}

 

testMapper.xml

<select id="forEachTest" parameterType="map" resultType="map">
        SELECT
            BOOK_ID,
            BOOK_NAME
        FROM MOCHI.RECURSIVE_BOOK 
            WHERE 1 = 1
            AND BOOK_NAME IN
            <foreach item="item" collection="array" open="(" separator="," close=")">    
                #{item}
            </foreach>  
</select>

 

 

결과

잘안보이지만 제대로 가져온다.

 

 

참고블로그

 

[SPRING] mybatis 동적 쿼리 foreach문 사용하기

- mybatis foreach문 사용하기 - mybatis 에서 동적쿼리인 foreach문을 사용하는 방법에 대해 알아보자. 코드를 보고 문법 및 사용 태그 옵션을 확인하도록하자. ▶예제1) SELECT * FROM cm_mine WHERE 1 = 1 AND id IN

mine-it-record.tistory.com

 

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!