動態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片段加以引用,如下: