在ibatis中經(jīng)常會(huì)遇到各種標(biāo)簽,其中有一個(gè)<iterate>標(biāo)簽是我們經(jīng)常遇到的。對(duì)于<iterate>標(biāo)簽,可能還有很多朋友不夠熟悉,本文就來(lái)詳細(xì)介紹<iterate>標(biāo)簽。
在看ibatis文檔時(shí),就看見(jiàn)過(guò)這個(gè)標(biāo)簽,并且還對(duì)其不是很了解,一直沒(méi)有到現(xiàn)在,在工作中用到了標(biāo)簽時(shí),才去了解了一下這個(gè)標(biāo)簽的具體含義。先把文檔中對(duì)標(biāo)簽的介紹貼出來(lái)一起分享。
標(biāo)簽:這屬性遍歷整個(gè)集合,并為L(zhǎng)ist集合中的元素重復(fù)元素體的內(nèi)容。
標(biāo)簽的屬性:
prepend-可被覆蓋的SQL語(yǔ)句組成部分,添加在語(yǔ)句的前面(可選)
property-類型為java.util.List的用于遍歷的元素(必選)
open-整個(gè)遍歷內(nèi)容體開(kāi)始的字符串,用于定義括號(hào)(可選)
close-整個(gè)遍歷內(nèi)容體結(jié)束的字符串,用于定義括號(hào)(可選)
conjunction-每次遍歷內(nèi)容之間的字符串,用于定義AND或OR(可選)
iterate-遍歷類型為java.util.List(或數(shù)組)的元素。
例子:
<iterate prepend=”AND” property=”userNameList”
open=”(” close=”)” conjunction=”O(jiān)R”>
username=#userNameList[]#
</iterate>
注意:使用標(biāo)簽時(shí),在List元素名后面包括方括號(hào)[]非常重要,方括號(hào)[]將對(duì)象標(biāo)記為L(zhǎng)ist,以防解析器簡(jiǎn)單地將List輸出成String。
我本人對(duì)上面標(biāo)簽中內(nèi)容的理解如下:
在生成該條sql語(yǔ)句時(shí),標(biāo)簽中的內(nèi)容是循環(huán)生成的,就拿上面的例子來(lái)說(shuō),生成的sql是(username=xxx1 or username=xxx2 or username=xxx 3)而不是(username=xxx1 or xxx2 or xxx3) 再舉個(gè)例子,如下:
id in
<iterate prepend="" property="ids" open="(" close=")" conjunction="," >
#ids[]#
</iterate> 。。。。。。。(1)
其生成的sql語(yǔ)句是:id in (xx1,xx2,xx3,.....),括號(hào)中的(包括括號(hào))是標(biāo)簽生成的。
標(biāo)簽雖然是遍歷整個(gè)集合的,但標(biāo)簽不象我們?cè)趈ava中用到的for一樣,一次一次的循環(huán)生成標(biāo)簽中的內(nèi)容,而是一次性利用list或數(shù)組生成整個(gè)可運(yùn)行的sql語(yǔ)句。就好比(1)它生成的sql不可能象這樣:id in (xx1)
id in (xx2) ,id in (xx3),.....
【編輯推薦】
- ibatis插件的安裝方式
- ibatis級(jí)聯(lián)解決登錄系統(tǒng)問(wèn)題
- 實(shí)例說(shuō)明ibatis動(dòng)態(tài)查詢
- ibatis下加入c3p0連接池的方法
- ibatis也能用proxool連接池