foreach是用來對3種型別的物件進行迴圈操作的,關於foreach的基礎知識請看:mybatis 示例之 foreach (上)
注:map型別沒有預設的map,所以不能直接寫collection="map",如果這麼寫,需要保證傳入的map引數有@param("map")註解。
有關引數的更詳細內容,建議看:深入了解mybatis引數
這節講的是foreach中map的用法。
map和list,array相比,map是用k,v儲存的,在foreach中,使用map時,index屬性值為map中的key的值。
因為map中的key不同於list,array中的索引,所以會有更豐富的用法。
第乙個簡單例子:
[html]view plain
copy
<
insertid=
"ins_string_string"
>
insert into string_string (key, value) values
<
foreach
item
="item"
index
="key"
collection
="map"
open=""
separator
=","
close=""
>
(#, #)
foreach
>
insert
>
可以看到這個例子相當簡單,表中需要兩個值,正好和k,v對應,因而map中的乙個k,v就對應一條資料,如果map中有多個k,v,就會儲存多個結果。
如果map中有兩對k,v,那麼執行sql如下:
[plain]view plain
copy
debug [main] - ==> preparing: insert into string_string (key, value) values (?, ?) , (?, ?)
debug [main] - ==> parameters: key 1(string), value 1(string), key 2(string), value 2(string)
debug [main] - <== updates: 2
大部分資料庫是支援values()()這種形式的插入語句,可以插入多條(
相關鏈結
- 可能需翻牆)。
下面再看乙個select的例子:
[html]view plain
copy
<
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
>
可以看到這裡用key=value來作為查詢條件,對於動態的查詢,這種處理方式可以借鑑。
一定要注意到$和#的區別
,$的引數直接輸出,#的引數會被替換為?,然後傳入引數值執行。
上述sql執行日誌如下:
[plain]view plain
copy
debug [main] - ==> preparing: select count(*) from key_cols where col_a = ? and col_b = ?
debug [main] - ==> parameters: 22(integer), 222(integer)
debug [main] - <== total: 1
最後,如果不考慮元素的順序和map中key,map和list,array可以擁有一樣的效果,都是儲存了多個值,然後迴圈讀取出來。
Mybatis示例之SelectKey的應用
selectkey在mybatis中是為了解決insert資料時不支援主鍵自動生成的問題,他可以很隨意的設定生成主鍵的方式。不管selectkey有多好,盡量不要遇到這種情況吧,畢竟很麻煩。selectkey需要注意order屬性,像mysql一類支援自動增長bwakolgtjx型別程式設計客棧的資...
MyBatis對映示例
resultmap 返回結果的對映 resultmap的id是這個對映的名字,可在查詢語句中引用表示此查詢返回該結果 type是模型物件的類名,也可以寫成別名 簡化作用 簡化成別名時,需要先註冊別名 resultmap內部 標籤表示該查詢中涉及的主鍵的對映關係 標籤表示普通資料屬性或字段的對映關係 ...
mybatis學習筆記三之mybatis外掛程式
一 外掛程式介紹 一般情況下,開源框架都會提供外掛程式或其他形式的擴充套件點,供開發者自行擴充套件。一是增加了框架的靈活性 二是開發者可以結合實際需求,對框架進行擴充套件。以mybatis為例,我們可基於mybatis外掛程式機制實現分頁 分表 監控等功能,在無形中增強功能。二 mybatis外掛程...