ibatis 에서 iterate 사용 (insert select, union all)
여러개의 데이터가 담긴 List를 한번이 insert 해야한다면 당황하기 마련이다.
이를 위해서는 insert select 구문과 union all 사용해야한다.
-------sql query---------
insert into tb_ccb_appl_bscost1 (
appl_id, bs_year, sub_bs_id, sub_bs_name
)
select appl_id, bs_year, sub_bs_id, sub_bs_name
from dual
union all
select appl_id, bs_year, sub_bs_id, sub_bs_name
from dual
....................................
....................................
을 반복해야한다. (여기서 dual은 가상의 테이블이다.)
가상의 테이블에 데이터를 집어넣은 뒤 그것을 한번에 밀어넣는 식이다.
union all 로 구분되는 하나의 dual 들은 1개의 row 값이 된다.
이 sql query를 java에서 모두 만든뒤 던지는 방법도 있지만 ibatis는 반복문을 자체 제공하기 때문에 더 편리하다.
----------ibatis iterate------------------
insert into tb_ccb_appl_bscost1 (
appl_id, bs_year, sub_bs_id, sub_bs_name
)
<iterate property="applBsCostList" conjunction=" union all ">
select #applBsCostList[].appl_id#,
#applBsCostList[].bs_year#,
#applBsCostList[].sub_bs_id#,
#applBsCostList[].sub_bs_name#
from dual
</iterate>
위의 iterate 는 해당 property 가 종료될때 까지 반복되며 property는
List<Object>를 TreeMap 에 담아 넘어오는 객체다.
conjunction 은 iterate 가 종료된 뒤 한번 더 실행될 때 query 문의 뒤에 붙는 수식을
지정해 줄 수 있다.