MyBatis學習筆記(四)——動態 SQL

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章