상세 컨텐츠

본문 제목

[JAVA] 대용량 데이터 조회 - ResultHandler

Spring/JAVA

by Chan.94 2023. 10. 15. 10:00

본문

반응형

ResultHandler 사용이유

Mybatis를 사용하여 대용량데이터를 select 해서 List <E> 형태로 호출하게 되면 몇십만 건 혹은 몇백만 건 row data를 한 번에 호출하게 되면 OOM(Out of Memory) 에러가 발생될 가능성이 매우 높다. 
OOM오류를 회피하는 방법으로 Mybatis의 ResultHandler를 통해 데이터 Row별로 반복 작업이 가능하다.

 

ResultHandler Example

Service

public void resultHandlerTest(){

    devLogMapper.selectData(new ResultHandler<DevLogDto>(){
        @Override
        public void handleResult(ResultContext<? extends DevLogDto> resultContext) {
            // 1row를 객체에 담음
            DevLogDto devLogDto = (DevLogDto)resultContext.getResultObject();

            // 후처리
        }

        });
    }
}

Mapper

void selectData(ResultHandler<DevLogDto> handler);

반드시 리턴타입을 지정하지 말아야 한다. 지정하면 그것이 우선순위가 되어 handler 로 가지 않는다.

xml

<select id="selectData" parameterType="DevLogDto" resultType="DevLogDto" fetchSize="1000">
	...
</select>

fetchSize설정

반응형

관련글 더보기

댓글 영역

>