쿼리를 사용하다보면, 루프를 돌면서 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();

}



+ Recent posts