ibatis批量插入資料庫

2021-10-04 13:34:05 字數 1297 閱讀 8541

在大批量插入資料庫的時候,如果用for迴圈一條條插入效率肯定會異常底下,本文介紹ibatis批量插入是如何做的,我這裡使用多執行緒進行分批插入,一批插入一萬條,實際插入交給子執行緒處理,這樣可以節省前端等待時間。在dao層定義個執行緒池,執行緒池定義方式以及引數如下

private static threadpoolexecutor executor = new threadpoolexecutor(1, 2, 10, timeunit.minutes,new arrayblockingqueue(20), new threadpoolexecutor.callerrunspolicy());

引數說明如下:

int corepoolsize,//核心執行緒數

int maximumpoolsize,//最大執行緒數

long keepalivetime,//執行緒存活時間

timeunit unit,//執行緒存活時間單位

blockingqueueworkqueue,//阻塞佇列

threadfactory threadfactory,//執行緒工廠(建立執行緒)

rejectedexecutionhandler handler//拒絕策略

核心執行緒數跟最大執行緒數有什麼區別?

其實就是正式員工跟外包員工的區別一樣,當正式員工不夠用的時候就去外部借調外包員工,處理完任務之後外包員工可以釋放,最終只剩下正式員工。所以設定的時候最大執行緒數要大於核心執行緒數。當任務繁忙時,執行緒最多會建立的數量就是maximumpoolsize。當任務處於空閒時,執行緒會被**,最終剩下的執行緒數就是corepoolsize。

keepalivetime和timeunit控制線程什麼時候會被**,也就是當空閒多久的時候就會銷毀部分執行緒,這裡核心跟非核心並沒有嚴格區分,銷毀的執行緒並不是說一定是非核心的,只是最終剩下的數量等於corepoolsize。

@override

public int batchinsert(listlist)

@override

public void run()

}

xml**配置格式寫法如下

insert into ***(batch_no, phone, create_time) values

(#list.batchno#,

#list.phone#,

#list.createtime#

)

ps:sublist方法是左閉右開的,比如說list.sublist(0,10),拿到的資料是不包括第10條的,即 0<=n<10。

ibatis批量匯入mysql資料庫

工作中需要批量匯入excel資料到mysql資料庫中 excel資料量比較大,一次大概匯入1萬多條 用傳統的for迴圈匯入mysql資料庫的話,非常耗時,大概3分鐘左右 所有就需要用到批處理,核心演算法如下 批量插入功能 suppresswarnings unchecked public void ...

批量插入oracle資料庫

odp技術,引數可以為陣列 注意事項 1 時間處理 防止資料庫中有date型別的資料,不設定格式則會出現無效月份的情況,如 new oracledate 2011 08 26 17 18 19 oracleglobalization og oracleglobalization.getclienti...

DataTable批量插入資料庫

最近在將excel中的檔案匯入到資料庫中,用程式進行編寫,由於資料量較大所以速度很慢,後來採用了sqlbulkcopy類,解決了速度的問題,我就insert語句,sqldataadapter.update dataset,tablename sqlbulkcopy.writetoserver dat...