在開發中,經常會遇到要執行的 sql 語句其實並不是固定,而是隨條件的變化而變化的。對於這種情況 mybatis 也有解決方案。
先看乙個固定的 sql 語句,查詢指定 name 和 age 的人:
select id, name, age
from person
where name = # and age = #
上面的 sql 當 name 或 age 為空時,該查詢將會丟擲異常。
在不確定查詢條件是否為空時,可以用if標籤進行檢查:
select id, name, age
from person
where 1=1
and name = #
and age < #
注意:where 後的1 = 1建議加上,這樣可以避免無一條件滿足時,最終的 sql 語句中 where 後面沒有過濾條件。
呼叫方法如下:
public void selectwithif()在select語句中,為了簡化if標籤,可以使用where - if標籤組合使用:
selectid, name, age
from person
and name = #
and age < #
在where - if標籤中,sql 語句可以加上and,mybatis 會自動識別。
呼叫方法:
public void selectwithifwhere()在update語句中,為了簡化if標籤,可以使用set - if標籤組合使用:
updateperson
name = #
and age = #
where id = #
set標籤為自動為每個if標籤中的 sql 語句加上逗號隔開。
呼叫方法:
public void updatewithifset()還有一種更強大的組合標籤trim - if,它既可以處理select語句,又可以處理update語句。如代替上面的where - if標籤:
select id,name, age
from person
name = #
age < #
代替上面的set - if標籤:
update person
name = #
age < #
where id = #
上面的標籤都是一組條件的中的每乙個條件要麼可選,要麼不選。但是對於一組互斥的條件,只能從中選擇乙個,那麼上面的標籤就不好處理了,需要使用choose - when標籤:
select id, name, age
from person
name = #
and age < #
注意:choose - when標籤類似於if - elseif - else。
對於動態 sql 非常必須的,主是要迭代乙個集合,通常是用於in條件。list 例項將使用 「list」 做為鍵,陣列例項以 「array」 做為鍵。
foreach 元素是非常強大的,它允許你指定乙個集合,宣告集合項和索引變數,它們可以用在元素體內。它也允許你指定開放和關閉的字串,在迭代之間放置分隔符。這個元素是很智慧型的,它不會偶然地附加多餘的分隔符。
注意:可以傳遞乙個list例項或者陣列作為引數物件傳給是mybatis。當你這麼做的時候,mybatis 會自動將它包裝在乙個 map中,用名稱在作為鍵。list 例項將會以 「list」 作為鍵,而陣列例項將會以 「array」 作為鍵。
使用陣列例項作為引數:
select id, name, age
from person
where id in
#呼叫方法:
public void selectwithforeacharray();
list persons = sqlsession.selectlist("edu.wzm.mybatis.mapping.personmapper.selectwithforeacharray", pids);
system.out.println(persons);
sqlsession.close();
}使用列表作為引數:
select id, name, age
from person
where id in
#呼叫方法:
public void selectwithforeachlist()
Mybatis動態SQL例項詳解
動態sql 什麼是動態sql?mybatis的官方文件中是這樣介紹的?動態 sql 是 mybatis 的強大特性之一。如果你使用過 jdbc 或其它類似的框架,你應該能理解根據不同條件拼接 sql 語句有多痛苦,例如拼接時要確保不能忘記新增必要的空格,還要注意去掉列表最後乙個列名的逗號。利用動態 ...
mybatis 動態sql詳解
內容 轉到原網頁insert into t blog title,content,owner values select from t blog where id update t blog set title content owner where id select from t blog se...
mybatis入門 動態sql
mybatis核心就是對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接 組裝。現有需求如下 需要查詢使用者,輸入的是使用者類,如果使用者的性別類不為空,則將性別作為查詢條件之一,如果使用者的姓名不為空,則將使用者姓名作為查詢條件之一。如果使用者兩個屬性都為空,則查詢所有使用者。將上...