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

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

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

  • 批量执行第一个SQL语句并检索生成的键

  • 使用批处理中步骤1中生成的键执行第二个SQL语句,并检索新生成的键

  • 使用步骤1和2中生成的两个键执行第三个SQL语句

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

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

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

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

回答(1)

2 years ago

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

对于第一种方式:绕过 GeneratedKeys 问题,您可以在第一组 INSERTs 之后生成 SELECT 并获取ID( GeneratedKeys ),使用检索到的ID生成第二组插入等等......但这很麻烦, 我认为 .

还考虑使用存储过程