Open nhkiiim opened 1 year ago
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#addBatch(java.lang.String)
- PreparedStatement에서 제공하는
addBatch()
를 활용하면 쿼리를 실행하지 않고 쿼리 구문을 메모리에 올려두었다가executeBatch()
시 한번에 배치로 실행 가능
while(...) {
...
// addBatch에 담기
pstmt.addBatch();
// 파라미터 Clear
pstmt.clearParameters() ;
// 건수를 나눠서 건 단위로 커밋
if ( (i % 10000) == 0){
// Batch 실행
pstmt.executeBatch() ;
// Batch 초기화
pstmt.clearBatch();
// 커밋
con.commit() ;
}
}
#
addBatch 대용량 데이터 처리 참고 : https://fruitdev.tistory.com/111
https://mybatis.org/mybatis-3/ko/dynamic-sql.html#foreach
- 파라미터를 Collection으로 받아 반목문 형태로 쿼리 작성 가능
오라클 PL/SQL과 foreach를 활용해 적용
<update id="update" parameterType="java.util.List"> <foreach collection="list" item="dto" open="DECLARE BEGIN" separator=";" close="END;"> UPDATE [테이블명] name = #{dto.name} WHERE BLD_ID = #{dto.bldId} AND OP_DT = #{dto.optDt} AND OP_SEQ = #{dto.opSeq} </foreach> </update>
<foreach>
속성
- collection : 전달 받은 인자를 속성 값으로 삽입, Map, Array, List, Set 등과 같은 반복 가능한 객체를 전달 가능
- item : collection 속성에서 전달 받은 객체 이름 지정
- open : 구문 시작 시 삽일 할 문자열
- close : 구문 종료 시 삽일 할 문자열
- separator : 반복되는 구문 사이에 삽일 할 문자열
- index : index값 이름 지정
오라클 PL/SQL 참고 : https://tantangerine.tistory.com/189
MyBatis에서 Batch처리 - SqlSession과 foreach 비교 : https://yookeun.github.io/java/2015/06/19/mybatis-batch/
PreparedStatement addBatch() / MyBatis foreach
관련 개념 #109