0

我需要根据记录是否已经存在来插入或更新记录。

我正在使用 JdbcBatchItemWriter 来编写记录。但如果主键的记录已经存在,我应该更新它......

所以一种解决方案是:

制作两个单独的列表,一个用于插入,一个用于更新(注意:我必须在每次记录是否已经存在时检查我的处理器,从而将记录添加到列表之一中),并且在我的编写器中有两个不同的 JdbcBatchItemWriter 实例, 例如:

JdbcBatchItemWriter<insertList> insertWriter;
JdbcBatchItemWriter<updateList> updateWriter;

有没有其他方法可以在批量更新时根据记录在编写器中的查询之间切换......即只有一个

JdbcBatchItemWriter<mylist> allWriter...and 
allWriter.write(mylistallitems);

我正在考虑使用合并查询...但是有任何性能问题吗?

4

1 回答 1

0

拥有两个不同的列表可能是更好的选择,因为如果您将来有不同的持久性机制,则无需重新设计应用程序。您可能需要一个查询来从数据库中获取所有现有的主键,将其存储为集合持有者,并在处理器中引用它。

在“Oracle 合并性能”上对 SO 的简短搜索表明,由于不同的因素,存在多个性能问题实例,并且可能比精心设计的插入/更新 SQL 慢。

此外,如果您再次收到完整数据(用于更新),您可能需要考虑 truncate-insert 方法 [通过添加侦听器在插入之前删除]

于 2014-03-10T21:50:36.437 回答