[size=medium]MyBatis的動态SQL是基于OGNL表達式的,它可以幫助我們友善的在SQL語句中實作某些邏輯。主要标簽有[/size]
[size=medium]
if
choose(when,otherwise)
trim
where
set
foreach
[/size]
[size=medium]
(一)if就是簡單的條件判斷語句 例如下代碼
[/size]
[size=medium]
(二)上面這段代碼發現 因為要拼接 條件 所在加上了1=1這樣子的條件,其實可以換一個标簽更靈活的使用,where語句的作用主要是簡化SQL語句中where中的條件判斷 它可以智能的去掉條件裡的 and或者or 例如下代碼[/size]
[size=medium]
(三)
choose元素的作用就相當于JAVA中的switch語句,基本上跟JSTL中的choose的作用和用法是一樣的隻選擇其中一個條件執行,通常都是與when和otherwise搭配的。看如下一個例子:
[/size]
[size=medium]
(四)trim辨別為格式化辨別,可以更靈活的去處多餘關鍵字的标簽,以及與其他辨別完成where和set的功能
prefix 當字首有
suffix 當字尾有
prefixOverrides 自動判斷前置
suffixOverrides 自動判斷後置
看例子吧比較清楚一些
[/size]
[size=medium]
上面這段代碼的意思是:當WHERE後緊随AND或則OR的時候,就去除AND或者OR。 除了WHERE以外, 其實還有一個比較經典的實作,那就是SET。
[/size]
[size=medium]
(五)
set元素主要是用在更新操作的時候,它的主要功能和where元素其實是差不多的,主要是在包含的語句前輸出一個set,然後如果包含的語句是以逗号結束的話将會把該逗号忽略,如果set包含的内容為空的話則會出錯。有了set元素我們就可以動态的更新那些修改了的字段。下面是一段示例代碼:
[/size]
[size=medium]
(六)
foreach的主要用在建構in條件中,它可以在SQL語句中進行疊代一個集合。foreach元素的屬性主要有item,index,collection,open,separator,close。item表示集合中每一個元素進行疊代時的别名,index指定一個名字,用于表示在疊代過程中,每次疊代到的位置,open表示該語句以什麼開始,separator表示在每次進行疊代之間以什麼符号作為分隔符,close表示以什麼結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list
如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array
如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可以封裝成map,實際上如果你在傳入參數的時候,在MyBatis裡面也是會把它封裝成一個Map的,map的key就是參數名,是以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map裡面的key。
看下面兩個例子一個是單參數,一個是多參數例子
[/size]
[size=medium]1.單參數[/size]
[size=medium]2.多參數[/size]
1)實作方法
2)調用代碼