MyBatis 動態Sql的寫法簡單說明

2021-10-05 08:59:32 字數 4007 閱讀 6557

根據不同的條件需要執行不同的 sql 命令.稱為動態 sql

"selbyaccinaccout" resulttype=

"log"

>

select * from log where 1=1

ognl表示式,直接寫key或物件的屬性.不需要新增任何特字符號

<

if test=

"accin!=null and accin!=''"

>

and accin=#

>

<

if test=

"accout!=null and accout!=''"

>

and accout=#

>

<

/select>

4. where

4.1 當編寫 where 標籤時,如果內容中第乙個是 and 去掉第乙個 and

4.2 如果中有內容會生成 where 關鍵字,如果沒有內容不 生成 where 關鍵

4.3 使用示例

4.3.1 比直接使用少寫 where 1=1

"selbyaccinaccout" resulttype=

"log"

>

select * from log

<

if test=

"accin!=null and accin!=''"

>

and accin=#

>

<

if test=

"accout!=null and accout!=''"

>

and accout=#

>

<

/where>

<

/select>

5. choose、 when、otherwise

5.1 只有有乙個成立,其他都不執行

. 5.2 **示例

5.2.1 如果 accin 和 accout 都不是 null 或不是」」生成的 sql 中只 有 where accin=?

"selbyaccinaccout" resulttype=

"log"

>

select * from log

"accin!=null and accin!=''"

>

and accin=#

<

/when>

"accout!=null and accout!=''"

>

and accout=#

<

/when>

<

/choose>

<

/where>

<

/select>

6. set用在修改 sql 中 set 從句

6.1 作用:去掉最後乙個逗號

6.2 作用:如果裡面有內容生成 set 關鍵字,沒有就不生成 6.3 示例

6.3.1 id=# 目的防止中沒有內容,mybatis 不生成 set 關 鍵字,如果修改中沒有 set 從句 sql 語法錯誤.

"upd" parametertype=

"log"

>

update log

id=#

,<

if test=

"accin!=null and accin!=''"

>

accin=#

,>

<

if test=

"accout!=null and accout!=''"

>

accout=#

,>

<

/set>

where id=#

<

/update>

7. trim

7.1 prefix 在前面新增內容

7.2 prefixoverrides 去掉前面內容

7.3 suffix 在後面新增內容

7.4 suffixoverrieds 去掉後面內容

7.5 執行順序去掉內容後新增內容

7.6 **示例

"upd" parametertype=

"log"

>

update log

"set" suffixoverrides=

",">

a=a,

<

/trim>

where id=

100<

/update>

8. bind

8.1 作用:給引數重新賦值

8.2 場景:

8.2.1 模糊查詢

8.2.2 在原內容前或後新增內容

8.3 示例

"selbylog" parametertype=

"log" resulttype=

"log"

>

"accin" value=

"'%'+accin+'%'"

/>

#<

/select>

9. foreach標籤

9.1 迴圈引數內容,還具備在內容的前後新增內容,還具備新增分 隔符功能.

9.2 適用場景:

in 查詢中.批量新增中(mybatis 中 foreach 效率比較 低)

9.2.1 如果希望批量新增,sql 命令`

insert into log values (

default,1

,2,3

),(default,2

,3,4

),(default,3

,4,5

)

9.2.2 opensession()必須指定

9.2.2.1 底層 jdbc 的 preparedstatement.addbatch();

factory.

opensession

(executortype.batch)

;

9.3 示例

9.3.1 collectino=」」 要遍歷的集合

9.3.2 item 迭代變數, #獲取內容

9.3.3 open 迴圈後左側新增的內容

9.3.4 close 迴圈後右側新增的內容

9.3.5 separator 每次迴圈時,元素之間的分隔符

"selin" parametertype=

"list" resulttype=

"log"

>

select * from log where id in

"list" item=

"abc" open=

"(" close=

")" separator=

",">

#<

/foreach>

<

/select>

10. sql 和include

10.1 某些 sql 片段如果希望復用,可以使用定義這個片段

"mysql"

>

id,accin,accout,money

<

/sql>

10.2 在select或delete或update或insert中使用include引用

"">

select "mysql"

>

<

/include>

from log

<

/select>

mybatis 常用sql寫法

1.mybatis 迴圈string 用逗號隔開的字串 兩種寫法 listidlist2 getuserids useridlist string userids string.join idlist map.put userids userids select t1.id id,t1.channe...

mybatis基礎 sql寫法

1.以list list 查詢結果集的寫法 select from 表名 select from 表名 select from 表名 select from 表名 2.以返回double為查詢結果 select truncate sum amount 100,2 as amount from 表名 ...

mybatis中的動態sql

if元素用法 select id role name as rolename note from t role where id and role name like concat choose when othersize元素用法 這三個元素充當了switch語句 select role no,r...