Mybatis的動態SQL語句

2021-10-01 15:56:06 字數 3489 閱讀 7794

mybatis的動態sql語句主要解決的問題是不同條件sql語句的拼接。

例如:根據使用者資訊,查詢使用者列表,當不知道根據的是使用者的什麼資訊時,寫出查詢的sql語句是有一定困難的,而動態sql語句主要解決的就是此類問題。

if標籤的使用

在持久層介面定義方法

/**

* 根據使用者資訊,查詢使用者列表

* @param user

* @return

*/list

findbyuser

(user user)

;

編寫持久層介面對應的對映檔案

"findbyuser"

resulttype

="user"

parametertype

="user"

>

select *from user where 1 = 1

test

="id != 0"

>

and id = #

if>

test

="username != null and username != ''"

>

and username like #

if>

test

="birthday != null"

>

and birthday = #

if>

test

="*** != null"

>

and *** = #

if>

test

="address != null"

>

and address = #

if>

select

>

編寫測試方法

/**

* 根據使用者資訊,查詢使用者列表

*/@test

public

void

testfindbyuser()

}

where標籤的使用

為了簡化上面 where 1=1 的條件拼接,我們可以採用標籤來簡化開發,因此修改持久層對映檔案

"findbyuser"

resulttype

="user"

parametertype

="user"

>

select *from user

>

test

="id != 0"

>

and id = #

if>

test

="username != null and username != ''"

>

and username like #

if>

test

="birthday != null"

>

and birthday = #

if>

test

="*** != null"

>

and *** = #

if>

test

="address != null"

>

and address = #

if>

where

>

select

>

foreach標籤的使用

froeach是對乙個集合進行遍歷,通常在構建in條件語句的時候應用

例如:根據乙個使用者id集合查詢使用者。

對id集合進行封裝,加入到list集合

編寫持久層介面方法

/**

* 根據id集合查詢使用者

* @param queryur

* @return

*/list

findinids

(queryur queryur)

;

編寫持久層介面對映檔案

<

!--根據id集合查詢使用者 --

>

"findinids" resulttype=

"user" parametertype=

"int"

>

select *from user

<

if test=

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

>

<

!-- foreach:用於遍歷集合

collection:代表要遍歷的集合

open:代表語句的開始部分

close:代表語句的結束部分

item:代表需要遍歷的集合的每個元素

sperator:代表分隔符

-->

"ids" open=

"id in (" close=

")" item=

"uid" separator=

",">

#<

/foreach>

>

<

/where>

<

/select>

編寫測試方法

/**

* 根據id集合查詢使用者

*/@test

public

void

testfindinids()

}

在對映檔案中,可以將重複的sql語句通過sql標籤提取出來,使用include標籤引用即可,已達到sql重用的效果。如下所示:

"querysql"

>

select *from user

sql>

"findall"

resulttype

="user"

>

refid

="querysql"

>

include

>

select

>

"findbyid"

resulttype

="user"

parametertype

="int"

>

refid

="querysql"

>

include

>

where id= #;

select

>

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...