在 Java 持久化技术中运行批量数据库更新

主要观点:关系型数据访问常需一次操作插入或更新数据库中的多行,可利用 JDBC 之上的批量更新设施,减少数据库往返次数提升操作结果时间。
关键信息:

  • JDBC 的Statement等接口支持批量执行 SQL 语句,通过addBatch添加语句,executeBatch执行,clearBatch清除批次,只有返回更新计数的语句可批量执行,select语句会抛出BatchUpdateException
  • 示例代码展示了使用StatementPreparedStatement进行批量更新,需注意关闭自动提交connection.setAutoCommit(false),根据BatchUpdateException处理失败情况。
  • Spring 的JdbcTemplate可简化批量更新代码,hibernate可利用其 JDBC 批处理设施,通过hibernate.jdbc.batch_sizeSession.setJdbcBatchSize设置批处理大小,批量插入实体对象时要注意使用身份列的情况,可定期刷新Session缓存。
  • jOOQ 也易于支持批量更新。
    重要细节:
  • Statement.executeBatch()返回整数数组,每个值是对应语句影响的行数,失败时抛出BatchUpdateException,可通过getUpdateCounts获取结果数组。
  • Spring 的JdbcTemplate通过batchUpdate方法进行批量更新,hibernateTransaction.commit时发送 SQL 语句,批量插入实体对象时要注意身份列问题。
  • jOOQ 通过BatchBindStep进行批量更新,可定期刷新Session缓存以减少内存使用。所有主要 Java 持久化技术都支持利用 JDBC API 进行批量模式更新以提升性能。
阅读 3
0 条评论