iBatis 동적 태그 정리 및 속성-2
2019. 9. 2. 16:26ㆍPROGRAMMING/iBatis
ibatis 동적 태그 정리 두번째 시간입니다.
이번 글에서 처음으로 소개할 동적 태그는 iterate입니다.
iterate 태그를 사용하면 컬렉션 객체를 파라미터로 받을 수 있으며
쿼리 하나를 실행해서 많은 데이터를 한번에 처리 할 수 있다는 장점이 있습니다.
먼저 iterate 태그의 속성값에 대해 먼저 간략히 설명해드리겠습니다.
◆ prepend : 태그 조건에 맞춰 실행될 sql문에 선행되어 붙을 SQL문구를 정의. (선택)
◆ property : 태그에서 사용할 주체가 되는 매개변수 명을 정의. (필수)
◆ open : 반복중에 하나의 블록을 열어줄 때 시작할 단어. 주로 여는 괄호 <" ( " , " [ "> 가 사용된다. (선택)
◆ close : open에서 열었던 블록을 닫아줄 때 사용할 단어. 주로 닫는 괄호 <" ) " , " ] "> 가 사용된다. (선택)
◆ conjunction : 반복할 단어 사이에 연결자. AND 나 OR (선택)
속성값 설명만 봐서는 이해가 잘 안되실테니 사용 예시를 들어보겠습니다.
//예시 1
<insert id="QueryId" parameterClass="java.util.List">
INSERT INTO MEMBER (NAME, AGE, BIRTH) VALUES
<iterate open = "(" close = ")" conjunction=", ">
#List[].name, #List[].age, #List[].birth
//또는 open과 close속성을 지우고
//( #List[].name, #List[].age, #List[].birth )
</iterate>
</insert>
/*
만약 List에 들어있는 객체가 3개라면 실제 실행될 쿼리는
INSERT INTO MEMBER (NAME, AGE, BIRTH) VALUES
('김철수', '29', '910402'), ('김영희', '27', '930515), ('이소원', '25', '951011')
입니다.
한번의 쿼리실행으로 3개의 데이터를 insert할 수 있었습니다.
부연설명을 하자면
한번의 반복 시작때 open속성에 지정해둔 "(" 괄호를 열고 끝날때 close속성으로 괄호를 닫습니다.
그리고 다음 반복의 시작전에 conjunction속성값인 ", " 를 쿼리에 끼워넣고
각 객체를 구분짓습니다.
*/
//예시 2
이번에는 HashMap을 parameter로 써보겠습니다.
--JAVA
HashMap hm = new HashMap(); //parameter로 사용할 map
List list = new ArrayList();
Member mem = new Member();
mem.age=26;
list.add(mem);
mem=new Member();
mem.age=28;
list.add(mem);
hm.put("hmList", list);
--iBatis
<select id="QuertId" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT * FROM MEMBER WHERE AGE
<iterate prepend = "IN" property="hmList" conjunction=",">
#hmList[].age#
</iterate>
</select>
/*
예시 2에서 실제 실행되는 쿼리는
SELECT * FROM MEMBER WHERE AGE IN ("26", "28")
MEMBER 테이블에서 AGE가 26과 28에 속하는 데이터를 추출하는 쿼리가 됩니다.
*/
'PROGRAMMING > iBatis' 카테고리의 다른 글
iBatis 동적 태그 정리 및 속성-1 (0) | 2019.08.28 |
---|