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