mybatis 中動態 sql 標籤的學習

2021-10-19 08:23:09 字數 1657 閱讀 6171

在mybatis中,進行資料庫操作時,不僅僅根據單一的標準來進行的增刪改查,有時候,可能需要根據乙個複雜的條件來操作,比如:根據乙個使用者的部分資訊,查詢乙個使用者;根據乙個使用者的id集合,查詢該集合中的所有使用者。這時候,可以使用一些動態的 sql 標籤來輔助運算元據庫,可以更加靈活、方便。

假設乙個使用者類的屬性有 username,id,***,address 四個屬性,我們需要根據其中某些屬性來查詢該使用者的資訊,比如:根據單一的屬性 username,id ,*** ,address,又或者根據組合屬性 username 和 id,username 和 address等等,使得 sql 語句用起來特別不方便,還要書寫多條語句。這時候,if 標籤就可以排上用場了。如:

select * from user where 1=1

新增查詢的條件

and username=#

and id=#

and ***=#

and address=#

select標籤中的屬性:

id:呼叫 sql 語句的函式

parametertype:傳進來的引數型別,上例是 user

resulttype:結果集的返回型別

這裡不作詳細解釋。主要講解 sql 標籤。

if 標籤中的 test 屬性表示判斷,首先判斷傳進來的使用者存不存在 username 屬性,存在則判斷是否匹配,不存在則判斷下乙個屬性,依次類推。

where 標籤可以表示 sql 語句中的 where 的條件限制,將條件限制語句包裹在 where 標籤中,使得**更整潔、易懂。如,上例也可以寫成:

select * from user

username=#

and id=#

and ***=#

address=#

當需要根據乙個使用者的 id 集合來查詢使用者時,foreach 標籤可以遍歷每乙個 id,再根據相應的 sql 語句來查詢。如:

select * from user

#

foreach 標籤中的 collection 屬性表示傳入的集合引數,open 和 close 表示的語句為 「and id in (ids)",and 表示乙個邏輯與的條件判斷,id in (ids) 表示 ids 集合中的每乙個 id。item 表示從 ids 集合中取出來的每乙個元素的名稱為 uid,separator 表示分隔符。

在 sql 的操作中,我們發現有一些 sql 語句經常重複著寫,這時候,可以採用 sql 標籤將該語句包裹成為乙個模板,需要使用時,直接用 include 標籤引入即可。

配置模板:

select * from user

將 select * from user 包裹起來,也可以包裹多條 sql 語句。

使用模板:

注意模板的結尾有沒有分號了。如果有分號,在與其他 sql 語句拼接時,會出現錯誤。在資料庫的使用中,sql 語句沒有分號結尾,並不會影響。

如,上例中採用模板也可以寫成:

#

MyBatis 動態sql標籤

findbyaccount parametertype com.lin.entity.account resulttype com.lin.entity.account select from account test id 0 id if test username null and userna...

MyBatis動態SQL常用標籤 if標籤

在用mybatis之前,我們如果進行條件查詢的話 條件查詢需要判斷從前端獲取的值是否存在來進行操作 是利用 拼接來進行實現的。第一步 在介面中寫出條件查詢的方法 根據姓名和密碼進行查詢 param是mybatis所提供的 org.apache.ibatis.annotations.param 作為d...

MyBatis動態SQL中trim標籤的使用引數

mybatis動態sql中trim標籤的使用 mybatis 官方文件 對 動態sql中使用trim標籤的場景及效果介紹比較少。事實上trim標籤有點類似於replace效果。trim 屬性 prefix 字首覆蓋並增加其內容 suffix 字尾覆蓋並增加其內容 prefixoverrides 字首...