foreach문
여러 개를 insert하거나 delete하고 싶을때가 있다.
쿼리를 단일로 보내지 말고 한 번에 동적으로 foreach문을 사용해서 insert, delete해보자
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
- collection : 전달받은 인자값
- item : 전달받은 인자 값을 사용할 alias명
- open : 해당 구문이 시작될 때 삽입할 문자열
- close : 해당 구문이 종료될 때 삽입할 문자열
- separator : 반복되는 구문사이에 구분값
- index : 반복되는 구문 번호 (0부터시작)
INSERT (ArrayList<Map<String, Object»로 전달)
<insert id="addItem" parameterType = "map">
INSERT ALL INTO TABLE_NAME(
SEQ_IDN,
A, B, C)
<foreach collection="list" item="item" index="i" separator="INTO TABLE_NAME">
VALUES (
(SELECT MAX(SEQ_IDN)+#{i} FROM TABLE_NAME),
#{item.A}, #{item.B}, #{item.C}
)
</foreach>
SELECT * FROM DUAL
</insert>
INSERT ALL 구문을 사용하여 INSERT를 해보았다. (INSERT ALL 맨 뒤에는 SELECT * FROM DUAL
를 붙여야한다.
구분값으로 INTO TABLE_NAME을 사용하여 VALUES(....)
를 반복하였다.
index=”i”를 사용하여 SELECT MAX(SEQ_IDN)+#{i} FROM TABLE_NAME
MAX값을 뽑아 사용할 수 있다.
전달한 Map값의 Key값(여기선 A)을 item뒤에 붙여서 #{item.A}
처럼 사용한다.
DELETE (List로 전달)
<delete id="deleteItem" parameterType="List">
DELETE FROM TABLE_NAME
WHERE
SEQ_IDN IN
<foreach collection="list" item="item" index="i" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
List를 인자로 받아 사용할때 #{item}
처럼 지정한 alias명만 써주면 된다.
PREVIOUSjQuery - Deferred(디퍼드)