2012-12-27 4 views
1

우리 애플리케이션에서는 데이터베이스 테이블에서 많은 항목을 업데이트해야하는 몇 가지 사용 사례가 있습니다. 우리는 데이터베이스와 상호 작용하는 데 사용되는 DataAccess 객체를 가지고 있습니다.일괄 업데이트 디자인 패턴

업데이트 코드는 다음과 같습니다.

String updateQuery = "UPDATE tbl SET column1=? WHERE column2=?"; 
for(i=0;;i++){ 
    Map<Integer, Object> params=new HashMap<Integer, Object>(); 
    params.put(1,"val"+i); 
    params.put(2,"val"+i); 
    DataAccess.addBatchParams(updateQuery,params); 
} 
DataAccess.executeBatch(updateQuery); 

내부 DataAccess.addBatchParams (..)

public void addBatchParams(String query, Map<Integer,Object> params){ 
    .. // preparedStatements contains all params passed till now. 
    .. 
    if(preparedStatements.size() >= BATCH_SIZE){ 
     executeBatch(query); 
     //flush preparedStatements as it has been written to db 
    } 
    .. 
    .. 
} 

내 관심사는 새로운 개발자가이 사용할 때마다, 그 그가가 executeBatch를 호출한다는 것을 알 수있는 방법이 없다는 점이다() 메서드를 사용하여 BATCH_SIZE보다 작은 마지막 몇 개 항목을 db로 플러시하는 모든 일괄 업데이트가 끝날 때까지 기다립니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 데이터베이스 배치 업데이트를 수행하기위한 디자인 패턴이나 다른 것이 있습니까?

도움을 주시면 감사하겠습니다.

답변

2

두 방법을 모두 통합하여 addBatchParamsexecuteBatch 메서드를 비공개로 설정합니다.

public void executeBatch(String query, 
    List<? extends Map<Integer,Object>> paramsList) { 
    for (Map<Integer,Object> params : paramsList) { 
     addBatchParams(query, params); 
    } 
    executeBatch(query); 
} 
+0

네 .. 그게 효과가 있습니다. 그러나 이것 이외에 다른 방법이 있습니다. 다른 말로하면, 이것은 어떻게 모든 사람이 일괄 업데이트를 수행합니까? –

+1

'spring-jdbc'는 이런 일괄 삽입을 확실히합니다. –