解決spring data jpa 批量保存更新的問題
使用jpa批量保存時,看日志發(fā)現(xiàn)是一條一條打印的,然后去看了下源碼,果然是循環(huán)調(diào)用的單個保存(巨坑啊)
spring.jpa.properties.hibernate.jdbc.batch_size=500spring.jpa.properties.hibernate.jdbc.batch_versioned_data=truespring.jpa.properties.hibernate.order_inserts=truespring.jpa.properties.hibernate.order_updates =true其中:batch_size根據(jù)自己的數(shù)據(jù)庫情況來設(shè)置
配置好后,感覺終于可以批量保存了,立馬試了一把,結(jié)果,一首涼涼。。。(并沒什么用)
繼續(xù)查資料,終于發(fā)現(xiàn)了還有一個坑,那就是jpa中主鍵策略會影響批量功能!!
如果主鍵策略使用了IDENTITY 也就是@GeneratedValue(strategy = GenerationType.IDENTITY),那么批量功能不支持的,
如果要開啟批量,那么就要使用sequence策略,也就是@GeneratedValue(strategy = GenerationType.SEQUENCE),
然后立馬去開啟,結(jié)果發(fā)現(xiàn)再次入坑,原來mysql數(shù)據(jù)庫是無法使用sequence策略的,已淚奔。。。。。
批量功能只能自己去單獨找尋方法實現(xiàn)了。
jpa在批量添加的時候,存儲慢如何解決問題spring.datasource.url = jdbc:mysql://xxxxxxxx:xxxx/xxxxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&autoReconnect=true
入口下加
@EnableTransactionManagement@SpringBootApplication@EnableTransactionManagement
service實現(xiàn)類下加
@Service@Transactional自己的字段多少來寫格式不能變下面是一個demo
String sql = “INSERT INTO xxxx(id,name,age) VALUES (:id,:name,:age)”;List uparChnMulMinList = (List) map.get(“uparChnMulMinList”);SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(uparChnMulMinList.toArray());namedParameterJdbcTemplate.batchUpdate(sql, batch);
自定義的list:List
SqlParameterSourceUtils導(dǎo)入這個直接用,調(diào)用這個方法createBatch();
開啟數(shù)據(jù)空批量配置:
rewriteBatchedStatements=true
開啟事務(wù):
@EnableTransactionManagement ,@Transactional
可以一試。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. IntelliJ IDEA設(shè)置條件斷點的方法步驟2. Python使用oslo.vmware管理ESXI虛擬機的示例參考3. Java構(gòu)建JDBC應(yīng)用程序的實例操作4. Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫進(jìn)行日期格式化的實現(xiàn)方法5. javascript設(shè)計模式 ? 建造者模式原理與應(yīng)用實例分析6. IDEA EasyCode 一鍵幫你生成所需代碼7. 一篇文章帶你了解JavaScript-對象8. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)9. 解決Python paramiko 模塊遠(yuǎn)程執(zhí)行ssh 命令 nohup 不生效的問題10. python flask框架快速入門
