MyBatis的關於批量資料操作的體會

2021-08-17 21:19:05 字數 2862 閱讀 1219

mybatis的前身就是著名的ibatis,不知何故脫離了apache改名為mybatis。

mybatis所說是輕量級的orm框架,在網上看過乙個測試報告,感覺相比於hibernate來說,優勢並不明顯。

下面說一下比較有趣的現象,根據mybatis的官方文件,在獲得sqlsession時,它有為批量更新而專門準備的:

session 

=sessionfactory.opensession();

//用於普通update

session

=sessionfactory.opensession(executortype.batch,

true

);//

用於批量update

一般來說,對mysql資料庫批量操作時速度取決於,是為每乙個處理分別建立乙個連線,還是為這一批處理一共建立乙個連線。按mybatis的手冊說明,選擇executortype.batch意味著,獲得的sqlsession會批量執行所有更新語句。不過我測試了一下,批量插入1000條資料,發覺executortype.batch方式的效率居然比普通的方式

差很多

1

<

insert

id="insert"

parametertype

="sdc.mybatis.test.student"

>25

insert into student (id, name, ***,

6address, telephone, t_id 7)

8values (#, #,

9#,

10#, #, #

11)

12insert

>

然後再次測試普通的sqlsession,發現日誌內容中雖然插入了1000條資料,但只新建了一次連線,最後又關閉了該連線(日誌如下)。也就是說mybatis中的普通sqlsession好像已經對批量插入預設是一次連線中完成,那麼還提供executortype.batch方式幹什麼,況且該方式好像效率也不行,或者是我使用executortype.batch方式不對??

debug

[main] - created connection

3502256

.debug

[main] - ooo connection opened

debug

[main] -

==>

executing: insert into student

(name

,***

,address

,telephone

,t_id

)values (?

,?,?

,?,?

)debug

[main] -

==>

parameters: 新人0

(string

),male

(string

),addr0

(string

),dd

(string),3

(integer

)debug

[main] -

==>

executing: insert into student

(name

,***

,address

,telephone

,t_id

)values (?

,?,?

,?,?

)debug

[main] -

==>

parameters: 新人1

附錄:mybatis配置檔案的dtd檔案(與ibatis3不同):

mybatis的中文手冊:

MyBatis批量插入 insert 資料操作

在程式中封裝了乙個list集合物件,然後需要把該集合中的實體插入到資料庫中,由於專案使用了spring mybatis的配置,所以打算使用mybatis批量插入,由於之前沒用過批量插入,在網上找了一些資料後最終實現了,把詳細過程貼出來。實體類trainrecord結構如下 1 2 3 4 5 6 7...

關於mybatis的批量修改

listproductskulist new arraylist 商品sku物件 productskuvo productskuvo null for int i 0 i jsonarray.size i productskuvo new productskuvo productskuvo.sets...

MyBatis的關於批量資料操作的測試

摘錄自 mybatis的前身就是著名的ibatis,不知何故脫離了apache改名為mybatis。mybatis所說是輕量級的orm框架,在網上看過乙個測試報告,感覺相比於hibernate來說,優勢並不明顯。下面說一下比較有趣的現象,根據mybatis的官方文件,在獲得sqlsession時,它...