Mybatis動態SQL例項詳解

2021-10-10 12:46:16 字數 1475 閱讀 5798

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