批量更新设计模式



在我们的应用程序中,有几个用例需要更新数据库表中的大量条目。我们有一个用于与数据库交互的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。有更好的方法吗?是否有任何设计模式或东西做数据库批量更新?

合并两个方法,使addBatchParamsexecuteBatch方法私有

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

最新更新