在我们的应用程序中,有几个用例需要更新数据库表中的大量条目。我们有一个用于与数据库交互的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。有更好的方法吗?是否有任何设计模式或东西做数据库批量更新?
合并两个方法,使addBatchParams
和executeBatch
方法私有
public void executeBatch(String query,
List<? extends Map<Integer,Object>> paramsList) {
for (Map<Integer,Object> params : paramsList) {
addBatchParams(query, params);
}
executeBatch(query);
}