主要观点:关系型数据访问常需一次操作插入或更新数据库中的多行,可利用 JDBC 之上的批量更新设施,减少数据库往返次数提升操作结果时间。
关键信息:
- JDBC 的
Statement
等接口支持批量执行 SQL 语句,通过addBatch
添加语句,executeBatch
执行,clearBatch
清除批次,只有返回更新计数的语句可批量执行,select
语句会抛出BatchUpdateException
。 - 示例代码展示了使用
Statement
和PreparedStatement
进行批量更新,需注意关闭自动提交connection.setAutoCommit(false)
,根据BatchUpdateException
处理失败情况。 - Spring 的
JdbcTemplate
可简化批量更新代码,hibernate
可利用其 JDBC 批处理设施,通过hibernate.jdbc.batch_size
或Session.setJdbcBatchSize
设置批处理大小,批量插入实体对象时要注意使用身份列的情况,可定期刷新Session
缓存。 - jOOQ 也易于支持批量更新。
重要细节: Statement.executeBatch()
返回整数数组,每个值是对应语句影响的行数,失败时抛出BatchUpdateException
,可通过getUpdateCounts
获取结果数组。- Spring 的
JdbcTemplate
通过batchUpdate
方法进行批量更新,hibernate
在Transaction.commit
时发送 SQL 语句,批量插入实体对象时要注意身份列问题。 - jOOQ 通过
BatchBindStep
进行批量更新,可定期刷新Session
缓存以减少内存使用。所有主要 Java 持久化技术都支持利用 JDBC API 进行批量模式更新以提升性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。