티스토리 뷰



전자정부프레임워크에서 ibatis 사용 시

엑셀로 데이터 업로드 등 대량의 데이터 처리를 위한 경우에 사용할 수 있다.


실제로 전 스프링3.0 버전과 ibatis 2.x 마지막 버전으로 작업하였습니다.


컨트롤러, 서비스의 구성은 어떻게 하든 상관이 없고

DAO만 다음과 같이 구성합니다.

public Object batchInsertData(final Vector dataVector) throws Exception {


// ibatis의 SqlExecutor을 사용

return getSqlMapClientTemplate().execute(

new SqlMapClientCallback<Object> () {

int dataCount = 0; // 저장한 데이터 건수

int batchCount = 0; // 30건씩 배치 처리한 건수

int totalCount = dataVector.size(); // 전체 데이터의 건수


/* (non-Javadoc)

* @see org.springframework.orm.ibatis.SqlMapClientCallback#doInSqlMapClient(com.ibatis.sqlmap.client.SqlMapExecutor)

*/

@Override

public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {

try {

// 배치처리 시작

executor.startBatch ();

Map<String, Object> eachData;


for (int idx = 0; idx < totalCount; idx++) {

eachData = dataVector.elementAt(idx);

// 데이터 저장

executor.insert("sqlQuery.batchInsert", eachData);

dataCount++;


// 저장건수 10건 마다 배치 처리

if ((dataCount % 30) == 0) {

executor.executeBatch();

batchCount++;

}

}

// 저장하지 않은 데이터 건수가 남아있다면 남은거 처리

if ((batchCount * 30) < totalCount) {

executor.executeBatch();

}

} catch (Exception e) {

throw new SQLException(e.getMessage());

}

return dataCount;

}

}

);

}



코드는 이렇게 되어 있으니까...

직접 사용해보면 아아~ 하고 감이 올겁니다.ㅋㅋㅋ


아아, 전 오라클 썼지만

아마도 다른 데이터베이스도 잘 지원될거라고 믿습니다?! ㅎㅎ


좋은 밤 되세요!!




댓글