INSERT INTO
테이블명
(컬럼1, 컬럼2, 컬럼3)
VALUES
(?, ?, ?),
(?, ?, ?),
...
와 같은 방식의 INSERT.
1 2 3 4 5 6 7 8 9 | @Transactional @Override public void insert(List<FileVO> filelist) { if(filelist != null || filelist.size() != 0) { for(FileVO file : filelist) { mapper.uploadFiles(file); } } | cs |
위와 같이 리스트를 순회하면서 단일객체마다 반복해 insert 처리해도 되지만
아래와 같이 XML에서 foreach 구문으로 쿼리 한번에 처리할 수도 있다.
1 2 3 4 5 6 7 8 9 | <insert id="insert" parameterType="java.util.List"> INSERT INTO files (id, filename, realname) VALUES <foreach collection="list" item="item" separator=","> (#{item.id}, #{item.filename}, #{item.realname}) </foreach> </insert> | cs |
속도 면에서 훨씬 우월하고, update 시에는 separator를 컴마 대신 세미콜론으로 변경해 사용할 수 있다.
update 시 커넥션 부분에 allowMultiQueries=true 옵션을 추가해야 한다.
<update id="update" parameterType="java.util.List"> <foreach collection="list" item="item" separator=";"> UPDATE files SET id = #{item.id}, filename = #{item.filename} realname = #{item.realname} WHERE id = #{item.id} </foreach> </update> | cs |