【发布时间】:2014-04-08 15:36:06
【问题描述】:
假设我们有一个 REST 服务,接受来自经理的销售订单列表。 (我们知道 managerId 并且他发送的所有订单都相同)
class SalesOrder {
String id;
String managerId;
//some other data
}
而且这项服务必须:
if SalesOrder not exists - save object
if object exists - update it
使用 Spring jdbcTemplate 保存或更新此列表的最有效方法是什么(就使用 db 而言)?
我考虑的第一种方法是:
public void saveOrUpdate(Iterable<SalesOrder> orders, String managerId) {
Set<String> presentInDbOrderIds = findOrderIds(managerId);
List<SalesOrder> ordersToInsert = new ArrayList<>();
List<SalesOrder> ordersToUpdate = new ArrayList<>();
for (SalesOrder ord : orders) {
if(presentInDbRecOrderHeaderIds.contains(ord.getId())) {
ordersToUpdate.add(ord);
} else {
ordersToInsert.add(ord);
}
}
batchInsertOrders(recOrdersToInsert);
batchUpdateOrders(recOrdersToUpdate);
}
第二个:
public void saveOrUpdate(Iterable<SalesOrder> orders) {
for (SalesOrder ord : orders) {
if(!update(ord)) { // returns true if object was updated
save(ord);
}
}
}
更新:
实际上(在我的情况下)每个订单都有一个 orderLines 集合,它们必须经过相同的过程,所以我正在寻找最轻松的方式(到 DB)来完成这个操作。
【问题讨论】:
-
在批量更新中,框架将遍历值并使用内部准备好的语句设置器
标签: java spring jdbctemplate