데이터를 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하려면 똑같이 설정해주면 된다.
'공부 > 프로그래밍' 카테고리의 다른 글
[MYSQL] 테이블 컬럼 조회 (0) | 2017.10.19 |
---|---|
[javascript] 배열 내 오브젝트의 특정 값 찾기 및 삭제하기 (0) | 2017.10.19 |
[Spring] 서비스 객체 초기화 init : @PostConstruct 사용 (0) | 2017.10.10 |
[정규식-JAVA] 금액에 콤마찍기 (0) | 2017.09.28 |
[정규식-JAVA] 쿠폰 or 카드번호 가운데에 '-' 삽입 (0) | 2017.09.28 |
댓글