MyBatis動態SQL例項講解

2021-12-30 09:44:55 字數 2582 閱讀 8202

在開發中,經常會遇到要執行的 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進行靈活拼接 組裝。現有需求如下 需要查詢使用者,輸入的是使用者類,如果使用者的性別類不為空,則將性別作為查詢條件之一,如果使用者的姓名不為空,則將使用者姓名作為查詢條件之一。如果使用者兩個屬性都為空,則查詢所有使用者。將上...