記JPA資料批量儲存

2021-10-03 07:46:02 字數 2942 閱讀 5708

測試工程為 springboot

測試表結構

阿里的 druid 資料庫連線池sql監控功能

druid 配置:

@bean

public servletregistrationbean statviewservlet()

@bean

public filterregistrationbean statfilter()

jpa資料來源配置

spring

:datasource

:url

: 資料庫位址

username

: 賬號

password

: 密碼

driver-class-name

: com.mysql.jdbc.driver

platform

: mysql

type

: com.alibaba.druid.pool.druiddatasource

# 下面為連線池的補充設定,應用到上面所有資料來源中

# 初始化大小,最小,最大

initialsize:1

minidle:3

maxactive:20

# 配置獲取連線等待超時的時間

maxwait

:60000

# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒

timebetweenevictionrunsmillis

:60000

# 配置乙個連線在池中最小生存的時間,單位是毫秒

minevictableidletimemillis

:30000

validationquery

: select 'x'

testwhileidle

:true

testonborrow

:false

testonreturn

:false

# 開啟pscache,並且指定每個連線上pscache的大小

poolpreparedstatements

:true

maxpoolpreparedstatementperconnectionsize:20

# 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆

filters

: stat,wall,log4j

# 通過connectproperties屬性來開啟mergesql功能;慢sql記錄

connectionproperties

: druid.stat.mergesql=true;druid.stat.slowsqlmillis=5000

# 合併多個druiddatasource的監控資料

#useglobaldatasourcestat: true

jpa:

# 配置 dbms 型別

database

: mysql

# 配置是否將執行的 sql 輸出到日誌

show-sql

:true

properties

:hibernate

:hbm2ddl

:# 配置開啟自動更新表結構

auto

: update

# 批次處理引數

order_inserts

:true

order_updates

:true

generate_statistics

: true 生成統計資訊

jdbc.batch_size

: 4 開啟批次儲存,一批次儲存量為10,如有100條資料則儲存十次

具體大小視情況而定

public

void

get(

)

此時控制台輸出資訊、已經開啟批次插入,應當生成一條sql才對。但是根據generate_statistics輸出資訊看批次操作是執行了一次,此處可能為日誌列印問題。此時可以根據druid sql監控檢視sql執**況判斷。

可以看到插入語句確實執行一次,檢視資料庫儲存情況,也沒有問題

此處測試資料依舊是四條,批次配置資訊更改為 jdbc.batch_size: 2 四條需兩次插入

此時sql列印依舊為四次,但generate_statistics輸出資訊批次操作為兩次

druid sql監控執行次數為兩次

關鍵配置

order_inserts:

true

order_updates:

true

generate_statistics:

true 生成統計資訊

jdbc.batch_size:

4 開啟批次儲存,一批次儲存量為10

,如有100條資料則儲存十次

具體大小視情況而定

JPA 呼叫儲存

要呼叫儲存過程,我們可以通過 entitymanager 物件的createnativequery 方法執行 sql 語句 注意 這裡說的是 sql語句,不是 hpql 呼叫儲存過程的 sql格式如下 在ejb3 中你可以呼叫的儲存過程有兩種 1 無返回值的儲存過程。2 返回值為 resultset...

批量資料的儲存方式

靜態陣列 順序儲存 動態陣列 順序儲存 鍊錶 鏈式儲存 鍊錶 不需要事先指定空間大小,動態分配和釋放記憶體。陣列和鍊錶的區別 陣列 編譯時決定大小,太大或太小?可以隨機訪問 a i 插入和刪除操作費時 鍊錶 執行時決定大小,需要時分配和不需要時釋放 不能隨機訪問 快速插入和刪除 記憶體的劃分與分配 ...

批量儲存資料 List 的使用

在機房收費這個系統中是沒有涉及到資料批量操作這樣的功能的,假如使用者某天提出了批量新增或修改學生 卡 資訊這樣的需求,我們應該怎樣實現呢?這是個很現實的問題,因為學生的資訊在一入學的時候就會儲存到乙個相應的系統裡,如教務系統。但是卡的資訊可能是後來才新增的。所以很可能提這樣的需求,從教務系統獲取乙份...