Mybatis學習筆記 動態SQL

2021-09-28 22:33:57 字數 2180 閱讀 5607

這片文章是對自己學習的總結。

在mybatis的crud語句中,可以通過設定一些引數或者標籤,來讓我們寫sql語句時更加便利。

sql元素的作用就是可以定義一條sql的一部分,然後以後的sql語句都可以直接引用它來減少**量。最常用的場景就是,我們在乙個dao層介面的配置檔案中進行各種各樣的查詢,但每次查詢的結果都是相同的列。比如下面三條sql**

select name, id, note, ***, age from t_role where id = #;

select name, id, note, ***, age from t_role where name = #;

select name, id, note, ***, age from t_roel where age > #;

我們發現,這三個查詢每次都是要查詢name, id, note, ***, age這四個列的值。但每次都這樣寫重複的列名顯得很繁瑣,所以我們可以使用sql元素來讓**顯得更精簡。

我們可以將name, id, note, ***, age定義成乙個sql元素並取名為rolecolumns。

name, id, note, ***, age

然後sql語句中就可以引用rolecolumns。

select from t_role where id = #;

這效果和老老實實將列名乙個個寫出來是一樣的。

select from t_role where id = #;

select from t_role where id = #;

引數暫時先不說吧·······

#{}比${}安全。傳統的mysql連線和執行中,為了防止sql注入問題,會使用到preparedstatement。使用#{}就相當於使用preparedstatement。用${}就相當於使用直接賦值。。

if標籤裡有乙個判斷,滿足判斷的話就有**塊中的元素就會被加入到總的sql語句中。比如下面的例子

select * from role where 1 = 1

and role_name = #

如果傳進來的引數是null,那執行的sql語句就是select * from role where 1 = 1;如果傳進來的引數不是null,那執行的sql語句就是select * from role where 1 = 1 and role_name = ?。

這三個標籤是配套使用的,他們的作用相當於switch,case,default。比如下面的例子

select * from role where 1 = 1

and role_name = #

and id = #

and id = 1

上面這個例子就是,如果提供了rolename就通過rolename查詢,提供了id就通過id查詢,兩者都沒提供的話,就預設查詢id為1的使用者。

在if標籤的例子中,我們為了防止sql語句出現錯誤,特地在where後加上 1=1 這樣的恒等式。

select * from role where 1 = 1

and role_name = #

如果不這樣寫,寫成下面的語句

select * from role where

and role_name = #

當rolename = null時,sql語句就變成 select * from role where 。這樣會出現錯誤,所以我們不得不加上1 = 1這樣的語句。其實我們大可不這樣寫,可以使用where標籤,比如下面這樣。

select * from role 

and role_name = #

and id = #

where只有在至少有乙個子元素才會插入,並且會智慧型決定刪不刪除 and 和 or。

需要注意的是,如果where標籤下使用when等非if標籤的語句,那麼這些非if標籤的語句是不受where影響的。where不會給他們自動加上and。

foreach標籤可以看mybatis學習筆記:對映器中的標籤。

學習筆記 Mybatis(四) 動態sql

動態sql if標籤 以查詢product表為例 1.product.xml配置檔案 使用模糊查詢的時候可能會用到不同的字段,如果查詢一次使用一條sql語句,會變得難以維護,就能使用mybatis的動態sql if標籤 如果沒有傳入引數那麼就是查詢所有,這樣就可以一條語句應付多種情況。select ...

Mybatis學習筆記之動態SQL揭秘

前言 動態sql是mybatis的乙個強大的特性,在使用jdbc運算元據時,如果查詢條件特別多,將條件串聯成sql字串是一件非常痛苦的事情,通常的解決方法使寫很多的if else條件語句去判斷和拼接,並確保不能忘了空格或在字段的最後省略逗號。mybatis使用一種強大的動態sql語言來改善這種情況 ...

spring整合mybatis後,列印SQL語句

網上說mybatis的早前版本配置列印sql還比較簡單,在3.0.6之後配置方式修改了。現在的spring mybatis.xml配置如下 不錯,列印sql只需要加乙個setting就可以了。mybatis的日誌列印方式比較多,slf4j log4j log4j2 jdk logging commo...