解決spring data jpa 批量保存更新的問題
spring data jpa 批量保存更新問題
使用jpa批量保存時,看日志發(fā)現(xiàn)是一條一條打印的,然后去看了下源碼,果然是循環(huán)調(diào)用的單個保存(巨坑?。?/p>

經(jīng)查詢jpa是可以實現(xiàn)批量保存更新的,具體設(shè)置如下:
spring.jpa.properties.hibernate.jdbc.batch_size=500 spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true spring.jpa.properties.hibernate.order_inserts=true spring.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 
sql語句這樣寫:根據(jù)自己的字段多少來寫格式不能變下面是一個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導入這個直接用,調(diào)用這個方法createBatch();
開啟數(shù)據(jù)空批量配置:
rewriteBatchedStatements=true
開啟事務:
@EnableTransactionManagement ,@Transactional
可以一試。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java面試崗常見問題之ArrayList和LinkedList的區(qū)別
ArrayList和LinkedList作為我們Java中最常使用的集合類,很多人在被問到他們的區(qū)別時,憋了半天僅僅冒出一句:一個是數(shù)組一個是鏈表。這樣回答簡直讓面試官吐血。為了讓兄弟們打好基礎(chǔ),我們通過實際的使用測試,好好說一下ArrayList和LinkedList的區(qū)別這道經(jīng)典的面試題2022-01-01
Idea中SpringBoot多模塊項目的建立實現(xiàn)
這篇文章主要介紹了Idea中SpringBoot多模塊項目的建立實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
如何使用HttpClient發(fā)送java對象到服務器
這篇文章主要介紹了如何使用HttpClient發(fā)送java對象到服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析
本文介紹了SpringBoot中MyBatis的兩個常用注解:@Mapper和@MapperScan,@Mapper用于標記單個Mapper接口,而@MapperScan用于批量掃描指定包下的所有Mapper接口,兩者都有各自適用的場景,選擇合適的注解可以提高開發(fā)效率并使代碼更加簡潔,感興趣的朋友一起看看吧2025-01-01
詳解在SpringBoot中使用MongoDb做單元測試的代碼
這篇文章主要介紹了詳解在SpringBoot中使用MongoDb做單元測試的代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11

