본문 바로가기
공부/프로그래밍

[JAVA] Mybatis 대용량 배치처리 시 사용 (ResultHandler)

by demonic_ 2017. 10. 18.
반응형

데이터를 1건씩 처리해야하는데 처리할 데이터가 많아서 한번에 가져오면 메모리 부담이 생길것 같아 찾던중 발견한 방법이다.



이렇게되면 Collection 단위로 가져오는 것이 아니라, 1개의 row 단위로 가져오게 된다.

여기서는 mapper를 사용해서 연결한 mybatis 이므로 다음과 같이 썻다.


Service 클래스

public void test(){

// Mapper를 통해 호출

batchDataMapper.selectData(new ResultHandler<CommandMap>(){

@Override

public void handleResult(ResultContext<? extends CommandMap> resultContext) {

// 1row를 객체에 담음

CommandMap prepayMap = resultContext.getResultObject();

// 서비스 처리.

}

});

}

}


Mapper 클래스

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

void selectData(ResultHandler<CommandMap> handler);


Xml 

<select id="selectData" parameterType="map" resultType="map"

fetchSize="-2147483648">

/* 조회쿼리... */

</select>



XML 설정을 보면 fetchSize가 이상한 숫자가 들어있는데, 1row 를 fetch하려면 똑같이 설정해주면 된다. 


반응형

댓글