主要观点:关系型数据访问常需一次操作插入或更新数据库中的多行,可利用 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。