mybatis中的foreach語句適用於多種業務場景,主要起的作用是迭代集合。在實際應用場景中,使用乙個正確的foreach能夠提高執行效率,所以通過記錄最近一次使用foreach的具體場景來了解foreach的具體實現。通過業務層傳入乙個list集合,其中存放了一批id號,list list 隨後我要對此集合中的id取出依次遍歷,即寫法如下
select
*from
user
where1=
1<
if test=
"id != null"
>
and id in
"item"
index
="index" collection=
"list"
open
="(" separator=
","close
=")"
>
'$'<
/foreach>
>
等同於以下的mysql寫法:
select
*from
user
where id in(1
,2,3
,4,5
)
其中需要注意的是collection引數後面的值要與變數名保持一致,我這裡為list則需要保持一致,關於這幾個引數的詳解在文末會有介紹。
假如我傳過來的是乙個以,為分隔符的連貫字串,例如某個物件中有乙個屬性string extinfo = 「1,2,3,4,5」,依然跟上述的業務場景一致,那我們就需要先將該字串做處理之後再進行foreach迭代
select
*from
user
where1=
1<
if test=
"extinfo != null"
>
and id in
"item"
index
="index" collection=
"extinfo.split(',')"
open
="(" separator=
","close
=")"
>
'$'<
/foreach>
>
還有一種業務場景是針對map的迭代,例如有乙個key-value對應的是ids-list,我們也能通過foreach迭代該map下的ids鍵來實現
select
*from
user
where1=
1<
if test=
"extinfo != null"
>
and id in
"item"
index
="index" collection=
"ids"
open
="(" separator=
","close
=")"
>
'$'<
/foreach>
>
上述的foreach應用場景主要解決了使用in語句迭代批量查詢,迭代刪除以及迭代編輯等批量操作,那其中的引數具體是什麼意思呢。 mybatis sql語句中的foreach標籤
mybaits sql中不能直接用in只能用foreach替代 網上有很多關於foreach的例子,就像這樣 不知道是我用的不對還是怎麼著,這樣是就是報錯,原因也很簡單只要將 改成 就可以使用了。還有人說用這個 可以直接使用in,不懂也沒弄出來。collection listtag 要迴圈的集合 i...
mybatis中的說明
1.prefix 在trim標籤內sql語句加上字首。suffix 在trim標籤內sql語句加上字尾。suffixoverrides 指定去除多餘的字尾內容,如 suffixoverrides 去除trim標籤內sql語句多餘的字尾 prefixoverrides 指定去除多餘的字首內容 inse...
MyBatis中的快取
mybatis作為持久化框架,提供了非常強大的快取特性。一般在提到mybatis快取的時候,指的都是二級快取。一級快取,即本地快取,缺省會啟用並且不能控制,可能會導致一些難以發現的錯誤。一 一級快取 public void testl1cache finally system.out.println...