Mybatis動態sql語句

2021-10-05 02:38:20 字數 3092 閱讀 5996

"finduserbycondition"

resultmap

="usermap"

>

select * from user

>

test

="username != null"

>

and username = #

if>

test

="user***!=null"

>

and *** = #

if>

where

>

select

>

元素只會在子元素有返回內容的時候才會插入where子句,元素代表查詢的條件,test為條件內容,因此:該語句的效果是,如果username和user***引數都不傳的話,將會查詢所有user。username和user***引數有就帶上,都有就都帶上,作為查詢的條件。

傳入兩個引數時:select * from user where username = ? and *** = ?

類似於switch case語句,不同於if標籤的是,這次傳入哪個引數就按哪個引數查詢,如果沒有傳入引數,可以通過標籤進行指定預設。

"finduserbyoneofcondition"

resultmap

="usermap"

>

refid

="defaultuser"

>

include

>

>

>

test

="username!=null"

>

and username = #

when

>

test

="userid!=null"

>

and id = #

when

>

>

and *** = '女'

otherwise

>

choose

>

where

>

select

>

如果兩個引數都為null,那就直接返回所有性別為女的user:select * from user where *** = '女'

如果傳入username,sql語句就變成了這樣:select * from user where username = ?

對集合進行遍歷的時候可以使用foreach標籤,在構建in條件語句的時候相當有用。

"finduserinids"

resultmap

="usermap"

parametertype

="queryvo"

>

select * from user

>

test

="ids!=null and ids.size()>0"

>

#foreach

>

if>

where

>

select

>

可以發現0">表示ids!=nullids.size>0兩個條件同時滿足,可以用and連線 。

另外,我們可以看到標籤有許多屬性:

collection:表示遍歷的集合id,從引數中獲取。

open:指定的開頭字元。

close:指定的結尾字元。

item:即將遍歷的集合中的元素名。

index:遍歷的索引序號。

separator:分隔符。

當我們傳入size為3的list時,它的sql語句就動態生成為:select * from user where id in ( ? , ? , ? )

寫到這裡,不僅大嘆一聲,不愧是動態sql。

利用set標籤動態地在行首插入set關鍵字。

"updateuserbycondition"

>

update user

>

test

="username != null"

>

username=#,if

>

test

="user*** != null"

>

***=#,if

>

test

="useraddress != null"

>

address=#,if

>

set>

where id=#

update

>

當我們只傳入usernam和***引數時,sql語句是這樣的:update user set username=?, ***=? where id=?

在一頓操作之後,我們可以發現,select * from user將會出現非常多次,因此,我們可以想辦法將重複的語句進行抽取。

"defaultuser"

>

select * from user

sql>

"findall"

resultmap

="usermap"

>

refid

="defaultuser"

>

include

>

select

>

這樣依賴,如果之後需要對該句進行修改,只需要改乙個地方就好了,方便維護。

mybatis 動態SQL語句

一 concat字串拼接 1.sql中字串拼接 select from tablename where name like concat concat 2.使用 代替 select from tablename where name like 解析過來的引數值不帶單引號,解析傳過來引數帶單引號。二 ...

MyBatis動態SQL語句

關鍵字 ifwhere trim foreach set if 如果傳入的p1 不為空,那麼才會sql才拼接id where mybatis的where標籤是對sql語句做了處理,當它遇到and或者or這些,where自己就給處理了。select from test t and username l...

mybatis框架 動態SQL語句)

1.實現動態的sql語句 2.掌握的分頁 3.mybatis的常用的配置。動態sql語句。1.動態sql 在sql語句中加入流程控制。比如加入if,foreach等。重點掌握if語句 案例1 更新 update userinfo set username userpwd useremail user...