您可以爲例如使用iBatis(我使用的是iBatis版本2.3.4,所以這個例子是基於這個的)。創建一批語句可以提高性能。同樣重要的是要注意將這個批處理包裝在一個單獨的事務中,就好像它沒有被包裝一樣,然後每個語句將啓動一個新的事務(性能可能是一個問題,這取決於我認爲的批量大小)。
請參閱下面的示例。您會注意到批次startBatch()
的開始僅在父記錄更新或插入後纔開始。這是因爲在調用executeBatch()
之前,不會生成數據庫生成的密鑰。這意味着如果您使用selectKey
更新您的對象與生成的鍵,他們將返回null。這就是爲什麼創建/更新父記錄在startBatch()
聲明之前。希望這有助於你作爲一個例子。
try {
sqlMap.startTransaction();
if (parent.getId == null) {
sqlMap.insert("createParent", parent);
} else {
sqlMap.update("updateParent", parent);
}
sqlMap.startBatch();
for (final Child exapleChild: parent.getChildren()) {
exapleChild.setParentId(parent.getId);
sqlMap.insert("createChildForParent", objectReference1);
}
sqlMap.executeBatch();
sqlMap.commitTransaction();
} catch (final SQLException e) {
throw new XXXException(e);
} finally {
try {
sqlMap.endTransaction();
} catch (SQLException e) {
throw new XXXException(e);
}
}