天天看點

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

動态SQL一直是MyBatis最強大的功能之一。我們以前在使用JDBC的時候,經常要留意一個sql語句中的空格或者逗号,如果缺少空格或逗号,編譯器就會出錯,這有時候會讓我們覺得很痛苦。然而,MyBatis的動态SQL可以幫我們解決這一類問題。

一、if和where

我們可以像這樣使用if和where标簽(在Mapper.xml檔案中):

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

在使用<if>标簽時,當test屬性的值滿足條件時,才會執行标簽内的内容。

在使用<where>标簽,where 元素知道隻有在一個以上的if條件有值的情況下才去插入"WHERE"子句。而且,若最後的内容是"AND"或"OR"開頭的,where 元素也知道如何将他們去除。

OrderQueryVo是包裝類,将Order和OrderDetail類包裝成一個類。代碼如下:

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

二、foreach

有時候我們希望查詢語句是這樣

select id,user_id,number,createtime,note from orders where id in (1,2)

這時候需要用到

<foreach>

标簽。

修改OrderQueryVo包裝類代碼,如下:

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

我們可這麼使用(在OrderMapper.xml檔案中):

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

三、choose(when ,otherwise)

有些時候,我們不想用到所有的條件語句,而隻想從中擇其一二。針對這種情況,MyBatis 提供了 choose 元素,它有點像 Java 中的 switch 語句。

可以這麼使用(在OrderMapper.xml檔案中):

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

四、sql片段

通過sql片段可以将通用的sql語句抽取出來,單獨定義,在其它的statement中可以引用sql片段。其中通用的sql語句,一般用在:where條件、查詢列。

4.1 定義sql片段

在OrderMapper.xml檔案中 定義sql片段,如下:

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

4.2 使用sql片段

使用

<include>

标簽對上面定義的sql片段加以引用,如下:

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

繼續閱讀