쿼리를 사용하다보면, 루프를 돌면서 insert/update 등을 처리해야 할 경우가 있다.
처리 개수가 많으면 insert 가 발생할때마다 부하가 많이 생기고,
통상 iBatis 에서 아래와 같은 코드 형식..
Iterator it = recvUserList.iterator();
while ( it.hasNext() ) {
DataMap dataMap = new DataMap();
dataMap.put( "MSG_UID", uId );
dataMap.put( "MSG_SID", sId );
dataMap.put( "MSG_CODE", sessionCode );
dataMap.put( "MSG_TYPE", type );
sqlMapClientTemplateTuc.insert(namespace + "insertMsg", dataMap);
}
iBatis의 배치 기능을 사용하면 한꺼번에 일괄 처리할 수 있다.
try {
sqlMapClientTemplateTuc.getSqlMapClient().startTransaction();
sqlMapClientTemplateTuc.getSqlMapClient().startBatch();
Iterator it = recvUserList.iterator();
while ( it.hasNext() ) {
DataMap dataMap = new DataMap();
dataMap.put( "MSG_UID", userId );
dataMap.put( "MSG_SID", mesPacketData.getParseCommand().getFromID() );
dataMap.put( "MSG_CODE", mesPacketData.getParseCommand().getSessionCode() );
dataMap.put( "MSG_TYPE", mesPacketData.getParseCommand().getType() );
sqlMapClientTemplateTuc.getSqlMapClient().insert(namespace + "insertMsg", dataMap);
}
sqlMapClientTemplateTuc.getSqlMapClient().executeBatch();
sqlMapClientTemplateTuc.getSqlMapClient().commitTransaction();
} finally {
sqlMapClientTemplateTuc.getSqlMapClient().endTransaction();
}