MyBatis 動態 SQL 編寫

2021-08-24 17:44:49 字數 2300 閱讀 3331

目錄

一、if 元素

二、choose、when、otherwise 元素

三、where、trim 元素

四、set 元素

五、foreach 元素

當未傳遞任何引數時,程式會將資料表中的所有資料查出。

<?xml version="1.0" encoding="utf-8"?>

select * from t_customer where 1=1

and username like concat('%',#,'%')

and jobs = #

案例場景:

當客戶名稱不為空,則只根據客戶名稱進行客戶篩選;

當客戶名稱為空,而客戶職業不為空,則只根據客戶職業進行客戶篩選;

當客戶名稱和客戶職業都為空,則要求查詢出所有**不為空的客戶資訊。

<?xml version="1.0" encoding="utf-8"?>

and username like concat('%',#,'%')

and jobs = #

and phone is not null

用 元素替代" where 1=1 "。只有 元素內的條件成立時,才會在拼接sql中加入 where 關鍵字,否則將不會新增。即使 where 之後的內容有多餘的 "and" 或 "or",元素也會自動將它們去除。

直接改寫部落格的第一段**:

<?xml version="1.0" encoding="utf-8"?>

select * from t_customer

and username like concat('%',#,'%')

and jobs = #

元素的作用是去除一些特殊的字串,它的 prefix 屬性代表的是語句的字首(這裡使用 where 來連線後面的 sql 片段),而 prefixoverrides 屬性代表的是需要去除的那些特殊字串(這裡定義了要去除sql中的 and)。

<?xml version="1.0" encoding="utf-8"?>

select * from t_customer

and username like concat('%',#,'%')

and jobs = #

讓程式只更新需要更新的字段。

元素會動態前置 set 關鍵字,同時也會消除 sql 語句中最後乙個多餘的逗號,元素用於判斷相應的字段是否傳入值,如果傳入的更新欄位非空,就將此字段進行動態sql組裝,並更新此欄位,否則欄位不執行更新。

<?xml version="1.0" encoding="utf-8"?>

username = #,

jobs = #,

phone = #,

where id = #

注意:

在對映檔案中使用 和 元素組合進行 update 語句動態 sql 組裝時,如果 元素內包含的內容都為空,則會出現 sql 語法錯誤,所以在使用 元素進行字段資訊更新時,要確保傳入的更新不能都為空。

如果將 id 值小於 100 的客戶資訊全部查詢出來???

<?xml version="1.0" encoding="utf-8"?>

#

在使用 時最關鍵也是最容易出錯的就是 collection 屬性,該屬性是必須制定指定的,而且在不同情況下,該屬性的值是不一樣的。主要有以下 3 種情況。

(1)如果傳入的是單引數且引數型別是乙個陣列或者 list 的時候,collection 屬性值分別為 array 和 list(或 collection )

(2)如果傳入的引數時多個的時候,就需要把它們封裝成乙個 map 了,當然單引數也可以封裝成 map 集合,這時候 collection 屬性值就為 map 的鍵

(3)如果傳入的引數是 pojo 包裝類的時候, collection 屬性值就為該包裝類中需要進行遍歷的陣列或集合的屬性名。

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

MyBatis動態sql查詢

什麼是動態sql mybatis核心 對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接 組裝。需求public class userpo if test userpo.id null and id if if where select id findusercount parame...