mybatis 批量操作

2021-07-03 06:11:40 字數 3135 閱讀 2900

foreach屬性

屬性描述

item

迴圈體中的具體物件。支援屬性的點路徑訪問,如item.age,item.info.details。

具體說明:在list和陣列中是其中的物件,在map中是value。

該引數為必選。

collection

要做foreach的物件,作為入參時,list>物件預設用list代替作為鍵,陣列物件有array代替作為鍵,map物件用map代替作為鍵。

當然在作為入參時可以使用@param("keyname")來設定鍵,設定keyname後,list,array,map將會失效。 除了入參這種情況外,還有一種作為引數物件的某個欄位的時候。舉個例子:

如果user有屬性list ids。入參是user物件,那麼這個collection = "ids"

如果user有屬性ids ids;其中ids是個物件,ids有個屬性list id;入參是user物件,那麼collection = "ids.id"

上面只是舉例,具體collection等於什麼,就看你想對那個元素做迴圈。

該引數為必選。

separator

元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用「,「隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該引數可選。

open

foreach**的開始符號,一般是(和close=")"合用。常用在in(),values()時。該引數可選。

close

foreach**的關閉符號,一般是)和open="("合用。常用在in(),values()時。該引數可選。

index

在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。

[html]view plain

copy

print

?<

selectid=

"countbyuserlist"

resulttype

="_int"

parametertype

="list"

>

select count(*) from users    

<

where

>

id in    

<

foreach

item

="item"

collection

="list"

separator

=","

open

="("

close

=")"

index=""

>

#    

foreach

>

where

>

select

> ::

select count(*) from users where id in ( ? , ? ) 

[html]view plain

copy

print

?<

insertid=

"addlist"

>

insert into deliver  

(  <

include

refid

="selectallcolumnssql"

/>

)  <

foreach

collection

="deliverlist"

item

="item"

separator

="union all"

>

select   

#,  

#  from dual  

foreach

>

insert

> ::

insert into deliver select ?,? from dual union all select ?,? from dual

[html]view plain

copy

print

?<

insertid=

"ins_string_string"

>

insert into string_string (key, value) values    

<

foreach

item

="item"

index

="key"

collection

="map"

open=""

separator

=","

close=""

>

(#, #)

foreach

>

insert

> ::

insert into string_string (key, value) values (?, ?) , (?, ?)

-- mysql

[html]view plain

copy

print

?<

selectid=

"sel_key_cols"

resulttype

="int"

>

select count(*) from key_cols where    

<

foreach

item

="item"

index

="key"

collection

="map"

open=""

separator

="and"

close=""

>

$ = #

foreach

>

select

> ::

select count(*) from key_cols where col_a = ? and col_b = ?  (一定要注意到$和#的區別,$的引數直接輸出,#的引數會被替換為?,然後傳入引數值執行。)

mybatis批量操作

查詢id在in裡面的測試 list測試 listselectidin param idlist listidlist 查詢id在in裡面的測試 map測試,就是id在乙個map中 listselectinmap param idmap hashmapidmap 修改所有id在list中的測試 int...

mybatis批量操作

應用場景 今天做了乙個插入資料的小功能,將含有50個物件的集合 list 插入到資料庫。自然而然的就要到了mybatis批量插入,記得剛參加工作時,類似場景我會寫乙個for迴圈,逐條插入資料。運算元據庫的時候會經過這樣乙個流程 建立 開啟 執行sql 關閉連線,建立和開啟資料庫連線對效能是有損失的,...

MyBatis 批量操作

使用mybatis做資料處理框架時,操作大量資料的插入 更新等耗時的工作時,可以使用批量處理來提高效率,mybatis的批量處理主要使用foreach標籤來實現。foreach 元素的功能是非常強大的,它允許你指定乙個集合,宣告可以用在元素體內的集合項和索引變數。它也允許你指定開閉匹配的字串以及在迭...