Spring JDBC - 针对多个表的批量插入

时间:2013-04-27 10:03:29

标签: spring jdbc spring-batch

使用JDBC(Oracle),我需要将数千行插入到三个不同的表中。基本上,我想在一个循环中一个接一个地执行3个插入SQL语句。

我读了this link,我想知道哪个实现更好(就执行时间而言):

  1. 批量执行第一个SQL语句并检索生成的密钥
  2. 使用批处理中步骤1中生成的密钥执行第二个SQL语句并检索新生成的密钥
  3. 使用步骤1和2中生成的键
  4. 执行第三个SQL语句

    或循环遍历每个记录以插入并逐个执行3个SQL语句的每个记录。

    我知道第一个实现是依赖于数据库的(因为每个数据库都不支持ResultSet.getGeneratedKeys())。也许还有第三个我没想过的实现?

    我想使用单个连接,因此,对于这两个实现,我首先获得连接,执行每个插入,最后提交并关闭连接。

    另外,我想知道我是否可以使用任何Spring JDBC抽象。第二个实现似乎可以使用Spring JdbcTemplace(使用@Transactional包装方法以使用相同的连接)但第一个实现看起来很困难,因为JdbcTemplate的方法batchUpdate不返回生成的键。

1 个答案:

答案 0 :(得分:1)

如果执行时间不是问题,我会采用第二种方式。它不容易出错,也更容易被另一位同事阅读。此外,您可以更好地控制交易。例如,您可以在完成3次插入后提交。

第一种方式:绕过GeneratedKeys问题,您可以在第一组SELECT之后INSERTs获取ID {(1}}),制作带有检索到的ID的第二组插入等等......但我觉得这很麻烦。

还考虑使用存储过程