MyBatis 07 DQL 動態SQL查詢

2022-06-05 14:30:12 字數 1816 閱讀 7942

《 if》標籤用於進行條件判斷,test 屬性用於指定判斷條件,當滿足判斷條件,才可以拼接《if》標籤裡的sql。

為了滿足select語句的拼接條件, 在 sql 語句後強行新增where 1=1 的恆成立條件;

如果不想用拼接where 1=1 , 還可以加標籤;

《where》標籤 用於管理 where 子句.有如下功能:

《where》標籤會自動幫我們在sql語句中新增或取消where子句(如果乙個引數都沒有那麼where子句取消), 也會自動去除and;

when標籤中的test標籤相當於switch

when相當於 case

otherwise 相當於 default

標籤用於維護update中的set子句;

測試類中, 獲取介面的物件, 呼叫介面的實現方法upduser();

trim標籤有4個屬性: prefix、prefixoverrides……

標籤和標籤其實都是由trim標籤演變而來;

當我們從前面新增了set, 從前面刪除了user,從後面新增了hahaha,從後面刪除了『逗號,』  ,我們現在看一看測試類中呼叫本方法, 然後通過debug的日誌級別, 列印在console上的資訊:

從這裡我們也可以看到,當我們在mybatis中呼叫#{}而不是${}取引數時,mybatis底層對呼叫preparedstatement,將引數先當成佔位符處理。

所以使用#{}可以有效避免sql注入問題,而使用${}不可以。

《bind》標籤一般用於模糊查詢,它是對傳進來的引數資料進行再處理的;

由於是模糊查詢,上圖出現了一處錯誤,你能找到嗎?

這個時候,#取出的username就不是簡簡單單的username的值了,而是加了兩個%的值;

《forech》標籤是動態sql查詢中,迭代乙個集合的必要操作,通常和in條件一起使用;

舉例:select * from employeestable where id in(1,2,3,4),

把in條件的元素(1,2,3,4)封裝成乙個list集合,然後把集合作為引數傳入。

測試這個方法的結果:

復用時用的;

MyBatis動態SQL之增 刪 改 查操作

概述 select from students 不去限制姓名和年齡當我們將年齡選擇為 20時,相當於下面的sql語句 select from students where age 20 當我們同時選擇條件姓名為 張三,年齡 20,則相當於下面的sql語句 select from students w...

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