解決spring data jpa 批量保存更新的問(wèn)題
使用jpa批量保存時(shí),看日志發(fā)現(xiàn)是一條一條打印的,然后去看了下源碼,果然是循環(huán)調(diào)用的單個(gè)保存(巨坑啊)
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ù)庫(kù)情況來(lái)設(shè)置
配置好后,感覺(jué)終于可以批量保存了,立馬試了一把,結(jié)果,一首涼涼。。。(并沒(méi)什么用)
繼續(xù)查資料,終于發(fā)現(xiàn)了還有一個(gè)坑,那就是jpa中主鍵策略會(huì)影響批量功能!!
如果主鍵策略使用了IDENTITY 也就是@GeneratedValue(strategy = GenerationType.IDENTITY),那么批量功能不支持的,
如果要開(kāi)啟批量,那么就要使用sequence策略,也就是@GeneratedValue(strategy = GenerationType.SEQUENCE),
然后立馬去開(kāi)啟,結(jié)果發(fā)現(xiàn)再次入坑,原來(lái)mysql數(shù)據(jù)庫(kù)是無(wú)法使用sequence策略的,已淚奔。。。。。
批量功能只能自己去單獨(dú)找尋方法實(shí)現(xiàn)了。
jpa在批量添加的時(shí)候,存儲(chǔ)慢如何解決問(wèn)題spring.datasource.url = jdbc:mysql://xxxxxxxx:xxxx/xxxxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&autoReconnect=true
入口下加
@EnableTransactionManagement@SpringBootApplication@EnableTransactionManagement
service實(shí)現(xiàn)類(lèi)下加
@Service@Transactional句這樣寫(xiě):根據(jù)自己的字段多少來(lái)寫(xiě)格式不能變下面是一個(gè)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)入這個(gè)直接用,調(diào)用這個(gè)方法createBatch();
開(kāi)啟數(shù)據(jù)空批量配置:
rewriteBatchedStatements=true
開(kāi)啟事務(wù):
@EnableTransactionManagement ,@Transactional
可以一試。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解php如何合并身份證正反面圖片為一張圖片2. 得到XML文檔大小的方法3. ASP錯(cuò)誤捕獲的幾種常規(guī)處理方式4. asp.net core項(xiàng)目授權(quán)流程詳解5. 詳解JS前端使用迭代器和生成器原理及示例6. ASP編碼必備的8條原則7. Python 如何將字符串每?jī)蓚€(gè)用空格隔開(kāi)8. .NET 中配置從xml轉(zhuǎn)向json方法示例詳解9. 解決python 輸出到csv 出現(xiàn)多空行的情況10. asp錯(cuò)誤 '80040e21' 多步 OLE DB 操作產(chǎn)生錯(cuò)誤
