Mybatis 動態SQL語句的使用

2021-09-25 11:28:29 字數 2677 閱讀 1108

select

*from

user

where uname like

"%"#"%" and *** = #

如果說我們傳過來的引數,有以下幾種情況:

1、有名字,有性別————查詢成功

2、有名字,沒有性別————查詢失敗

3、沒有名字,只有性別————查詢成功

4、兩個都沒有————查詢失敗

當我們在寫這麼乙個**的時候,我們不可能說以上此種情況對應四個sql語句,寫起來必定會很麻煩。這裡就可以用到動態sql語句,我們只需要乙個語句就能處理這四種情況。

動態sql語句

1、if語句

加入了是否為空的判斷,如果其中乙個為空就不會加入該字段的查詢。

缺點:需要在where後面加乙個1=1,用來拼接第乙個if的and,否則會報錯

"findbycondition"

resultmap

="users"

parametertype

="user"

>

select * from user where 1=1

test

="username != null"

>

and uname like "%"#"%"

if>

test

="*** != null"

>

and *** = #

if>

select

>

2、where語句

sql語句中不用拼接1=1,也不用寫where關鍵字,where標籤會自動幫我們處理第乙個拼接語句中的and

"findbycondition"

resultmap

="users"

parametertype

="user"

>

select * from user

>

test

="username != null"

>

and uname like "%"#"%"

if>

test

="*** != null"

>

and *** = #

if>

where

>

select

>

3、sql片段

把重複的sql語句提取出來

–文字:sql語句

"select_user"

>

select * from usersql

>

– 關聯使用sql片段

– include :包含

– refid: 關聯的sql片段的id

– ref :references

在引用的時候用以下標籤:

refid

="select_user"

>

include

>

當然這個語句是很簡單,沒有必要引用,但有時如果遇到特麼複雜的語句,sql片段就顯得很重要了。

4、foreach語句

當我們傳入資料為乙個陣列或者list的時候,用foreach語句來進行處理。

例如我們要使用一下語句來進行刪除:

delete

from

user

where uid in(6

,7);

用佔位符來佔位?如果說我們並不知道我們將來一次性要傳入多少個資料怎麼辦?這個時候就可以使用foreach語句,先寫好where之前的內容,然後加上foreach標籤,有6個可用引數,介紹在下方已寫。

"delbyarray"

parametertype

="integer"

>

delete from user where

collection

="array"

open

="uid in ("

close

=")"

separator

=","

item

="id"

>

#foreach

>

delete

>

"delbylist"

parametertype

="list"

>

delete from user where

collection

="list"

open

="uid in ("

close

=")"

separator

=","

item

="id"

>

#foreach

>

delete

>

mybatis 動態SQL語句

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

Mybatis動態sql語句

finduserbycondition resultmap usermap select from user test username null and username if test user null and if where select 元素只會在子元素有返回內容的時候才會插入where...

MyBatis動態SQL語句

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