这个小的开源项目Github是展示如何使用Spring Boot + JPA实现MySQL批量更新。
关键点:
- 在application.properties中设置spring.jpa.properties.hibernate.jdbc.batch_size
- 在application.properties中设置JDBC URL rewriteBatchedStatements=true(MySQL的优化,语句被重写为单个String缓冲区并在单个请求中发送)
- 在application.properties中设置JDBC URL cachePrepStmts=true(启用缓存和如果你决定设置prepStmtCacheSize,prepStmtCacheSqlLimit等等也是有用的;没有这个设置,缓存被禁用)
- 在application.properties中设置JDBC URL useServerPrepStmts=true(这样你切换到服务器端预处理语句(可能会带来显着的性能提升))
- 如果使用cascade all / merge的父子关系(例如,一对多,多对多),则考虑spring.jpa.properties.hibernate.order_updates=true通过订购更新来设置优化批处理
- 在Hibernate 5之前,我们需要在application.properties中设置一个设置,用于在更新和删除操作期间启用版本化实体的批处理(包含@ Version隐式乐观锁定的实体 )。此设置为:spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true。从Hibernate 5开始,默认情况下应该设置true。
父子关系的数据更新输出案例:
点击标题见原文。