1
首先,我將嘗試描述我願意做的事情,然後我會問我的問題。 我需要做到以下幾點:執行插入/刪除批處理的最佳方法spring-jdbc/mysql
- 列表對應於一些條件
- 做一些測試的所有行(如:檢查是否它尚未插入),如果測試通過,那麼插入行另一個數據庫
- 刪除行(是否通過測試與否)
以下是我的執行
List<MyObject> toAdd = new ArrayList<MyObject>();
for(MyObject obj:list){
if(!notYetInserted(obj){
toAdd.add(obj);
}
}
myObjectDAO.insertList(toAdd);
myObjectDAO.deleteList(list);
服務方法標記爲事務性。
在我的DAO方法deleteList和insertList非常相似,所以我只是把這裏插入的方法。
public void insertList(final List<MyObject> list){
String sql = "INSERT INTO table_test " +
"(col_id, col2, col3,col4) VALUES (?, ?, ?,?)";
List<Object[]> paramList = new ArrayList<Object[]>();
for (MyObject myObject : list) {
paramList.add(new Object[] {myObject.getColId(),
myObject.getCol2(), myObject .getCol3(), myObject.getCol4()}
);
}
simpleJdbcTemplate.batchUpdate(sql, paramList);
}
我不知道要執行這樣的操作的最佳方式,我讀here是呼籲更新的循環可能會拖慢系統(尤其是在我的情況裏,我將有大約100K插入/刪除一次)。我不知道DAO中的這些額外的循環是否會讓我的系統更慢,如果在處理該批次時反覆發生問題會發生什麼(我還想過將服務的測試轉移到DAO只有一個循環和一個額外的測試,我真的不知道這是個好主意)。所以,我希望你的建議。非常感謝。
PS:如果您需要更多的細節請隨時詢問!
感謝您的快速回答。我將測試您的解決方案並進行比較。再次感謝! – aslan