動態sql
什麼是動態sql?
mybatis的官方文件中是這樣介紹的?
動態 sql 是 mybatis 的強大特性之一。如果你使用過 jdbc 或其它類似的框架,你應該能理解根據不同條件拼接 sql 語句有多痛苦,例如拼接時要確保不能忘記新增必要的空格,還要注意去掉列表最後乙個列名的逗號。利用動態 sql,可以徹底擺脫這種痛苦。
使用動態 sql 並非一件易事,但借助可用於任何 sql 對映語句中的強大的動態 sql 語言,mybatis 顯著地提公升了這一特性的易用性。
如果你之前用過 jstl 或任何基於類 xml 語言的文字處理器,你對動態 sql 元素可能會感覺似曾相識。在 mybatis 之前的版本中,需要花時間了解大量的元素。借助功能強大的基於 ognl 的表示式,mybatis 3 替換了之前的大部分元素,大大精簡了元素種類,現在要學習的元素種模擬原來的一半還要少。
換句話說,我們可以根據傳入引數的不同,來執行不同的查詢條件。
and username = #
這個sql的意思是:
當id不為null的時候執行的sql是:select * from user where id = #
當id為null的時候執行的sql是 select * from user where 1=1
很明顯我們可以看到where 1=1 是多餘的,因此我們可以這樣寫:12
3456
78910
11select * from user
and id = #
and username = #
測試:編寫乙個測試類:
user
*****=
user
user
user
foreach標籤:
當我們需要查詢出 id為1、2、3時應該怎麼做? sql應該這樣寫:select * from user where id in (1,2,3)。那麼使用mybatis的foreach標籤應該如何使用?12
3456
78select * from user
#我們可以看到,foreach中我們使用到了5個值:
collection 這裡就是寫我們傳入的型別,如果是陣列就是array ,如果是集合就是list
open 我們之前說到select * from user where id in (1,2,3)正確的sql應該這樣寫,那麼open就是填寫我們需要拼接的前半部分
close 填寫我們需要拼接的後半部分
item 我們需要遍歷的值是id,所以就填寫id
separator ......where id in (1,2,3) 1,2,3之間用,分割。
測試:user
user
正確~最後
這裡只是介紹了兩個經常使用的標籤,mybatis中還有很多標籤,比如choose、when、otherwise、trim、set等等
值得一說的是mybatis的官方**中已經支援中文了,母語看著更舒服~
MyBatis動態SQL例項講解
在開發中,經常會遇到要執行的 sql 語句其實並不是固定,而是隨條件的變化而變化的。對於這種情況 mybatis 也有解決方案。先看乙個固定的 sql 語句,查詢指定 name 和 age 的人 select id,name,age from person where name and age 上面...
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進行靈活拼接 組裝。現有需求如下 需要查詢使用者,輸入的是使用者類,如果使用者的性別類不為空,則將性別作為查詢條件之一,如果使用者的姓名不為空,則將使用者姓名作為查詢條件之一。如果使用者兩個屬性都為空,則查詢所有使用者。將上...