SELECT 查詢增加一次數據庫往返,高併發下影響吞吐。UPDATE/DELETE,若影響行數為 0 則說明不存在,拋出業務異常即可。參考上文:事務 + executeBatch(),統一提交或回滾,無需逐條人工判斷。
public void batchDelete(Set ids) {
String sql = "DELETE FROM table WHERE id = ?";
try (Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
conn.setAutoCommit(false);
for (Long id : ids) {
ps.setLong(1, id);
ps.addBatch();
}
int[] results = ps.executeBatch();
// 可選:統計成功數
long success = Arrays.stream(results).filter(r -> r > 0).count();
conn.commit();
} catch (SQLException e) {
throw new RuntimeException("批量刪除失敗", e);
}
}
「信任前端傳來的 ID(配合權限校驗),用影響行數為 0 判斷不存在,批量操作走事務批量更新。」