動态SQL一直是MyBatis最強大的功能之一。我們以前在使用JDBC的時候,經常要留意一個sql語句中的空格或者逗号,如果缺少空格或逗号,編譯器就會出錯,這有時候會讓我們覺得很痛苦。然而,MyBatis的動态SQL可以幫我們解決這一類問題。
一、if和where
我們可以像這樣使用if和where标簽(在Mapper.xml檔案中):
在使用<if>标簽時,當test屬性的值滿足條件時,才會執行标簽内的内容。
在使用<where>标簽,where 元素知道隻有在一個以上的if條件有值的情況下才去插入"WHERE"子句。而且,若最後的内容是"AND"或"OR"開頭的,where 元素也知道如何将他們去除。
OrderQueryVo是包裝類,将Order和OrderDetail類包裝成一個類。代碼如下:
二、foreach
有時候我們希望查詢語句是這樣
select id,user_id,number,createtime,note from orders where id in (1,2)
這時候需要用到
<foreach>
标簽。
修改OrderQueryVo包裝類代碼,如下:
我們可這麼使用(在OrderMapper.xml檔案中):
三、choose(when ,otherwise)
有些時候,我們不想用到所有的條件語句,而隻想從中擇其一二。針對這種情況,MyBatis 提供了 choose 元素,它有點像 Java 中的 switch 語句。
可以這麼使用(在OrderMapper.xml檔案中):
四、sql片段
通過sql片段可以将通用的sql語句抽取出來,單獨定義,在其它的statement中可以引用sql片段。其中通用的sql語句,一般用在:where條件、查詢列。
4.1 定義sql片段
在OrderMapper.xml檔案中 定義sql片段,如下:
4.2 使用sql片段
使用
<include>
标簽對上面定義的sql片段加以引用,如下: