728x90
반응형
mybatis에서 아래와 같이 코드를 잘 경우 foreach문을 너무 많이 돌아서 일정 byte이상을 넘게되면 에러가 난다.
INSERT INTO L_OP_BIT_IMG_TRNS (
TRNS_DTM
, SEQ
, IMG_CLSS
, TITL
, ISTC
, DSPY_TIME
, FILE_NM
, STRT_DTM
, END_DTM
, OPRR_ID
, IMG_VRSN_ID
)
SELECT TRNS_DTM
, SEQ
, IMG_CLSS
, TITL
, ISTC
, DSPY_TIME
, FILE_NM
, STRT_DTM
, END_DTM
, OPRR_ID
, IMG_VRSN_ID
FROM (
<foreach collection="imgList" item="items" open="(" close=") A" separator="UNION ALL">
SELECT SYSDATE TRNS_DTM
, #{items.seq} SEQ
, #{items.imgClss} IMG_CLSS
, #{items.titl} TITL
, #{items.istc} ISTC
, #{items.dspyTime, jdbcType=INTEGER} DSPY_TIME
, #{items.fileNm} FILE_NM
, TO_DATE(#{items.strtDtm}, 'YYYY-MM-DD HH24:MI:SS') STRT_DTM
, TO_DATE(#{items.endDtm}, 'YYYY-MM-DD HH24:MI:SS') END_DTM
, #{oprrId} OPRR_ID
, #{imgVrsnId} IMG_VRSN_ID
FROM DUAL
</foreach>
이런 insert문을 사용할 때 대용량 데이터를 넘겨야 한다면 mybatis에서는 에러가 날 수 밖에 없으므로 batch방식을 사용해야 한다.
배치처리란, 빅데이터 등 대용량 데이터에서 사용하는 방식으로, 초, 분, 시, 일, 월단위 등 데이터를 모았다가 한번에 처리하는 방식을 말한다.
jdbc에 직접 연결해서 batch 방식을 사용해 보자
jdbc가 아닌, spring에서 batch를 처리하는 방법도 있다. 이에 대해선 따로 포스팅할 예정이다.
참고
728x90
반응형
'java' 카테고리의 다른 글
[java] 코드 실행시간 측정하기 (0) | 2023.03.31 |
---|---|
[java] List, Map에서 유용하지만 생소한 함수 정리 (0) | 2023.03.24 |
[java] FTP file upload시 한글 파일 안올라가는 문제 (0) | 2023.01.12 |
[java] Quartz를 이용해 Spring에서 Scheduling하기 (0) | 2023.01.04 |
[java] POI라이브러리로 엑셀 파일에 이미지 넣기 (0) | 2022.12.20 |