Mybatis를 사용하여 대용량데이터를 select 해서 List <E> 형태로 호출하게 되면 몇십만 건 혹은 몇백만 건 row data를 한 번에 호출하게 되면 OOM(Out of Memory) 에러가 발생될 가능성이 매우 높다.
OOM오류를 회피하는 방법으로 Mybatis의 ResultHandler를 통해 데이터 Row별로 반복 작업이 가능하다.
public void resultHandlerTest(){
devLogMapper.selectData(new ResultHandler<DevLogDto>(){
@Override
public void handleResult(ResultContext<? extends DevLogDto> resultContext) {
// 1row를 객체에 담음
DevLogDto devLogDto = (DevLogDto)resultContext.getResultObject();
// 후처리
}
});
}
}
void selectData(ResultHandler<DevLogDto> handler);
반드시 리턴타입을 지정하지 말아야 한다. 지정하면 그것이 우선순위가 되어 handler 로 가지 않는다.
<select id="selectData" parameterType="DevLogDto" resultType="DevLogDto" fetchSize="1000">
...
</select>
fetchSize설정
[JAVA] 스트림(Stream) 중간연산, 최종연산 메소드 - (2) (31) | 2024.02.12 |
---|---|
[JAVA] 스트림(Stream)이란 - (1) (66) | 2024.01.20 |
[JAVA] 접근제어자 및 Protected에 대한 고찰 (15) | 2023.03.14 |
[JAVA] Custom Annotation 생성 및 활용 (5) | 2023.03.05 |
[JAVA] Calendar (날짜와 시간) 내일, 월말, 월초, 년말, 년초, 윤년 구하기 (4) | 2023.02.19 |
댓글 영역