天天看點

mybatis 學習筆記(三)動态SQL

[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)調用代碼