在大批量插入資料庫的時候,如果用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...