MyBatis中 和 的區別

2021-10-25 09:25:42 字數 2221 閱讀 3575

一、在mybatis 的對映配置檔案中,動態傳遞引數有兩種方式:

#{} 佔位符

${} 拼接符  

二、#{} 和 ${} 的區別

區別1、  

1)#{} 為引數佔位符 ?,即sql 預編譯

2)${} 為字串替換,即 sql 拼接

區別2、  

1)#{}:動態解析 -> 預編譯 -> 執行

2)${}:動態解析 -> 編譯 -> 執行

區別3、

1)#{} 的變數替換是在dbms 中

2)${} 的變數替換是在 dbms 外

區別4、

1)變數替換後,#{} 對應的變數自動加上單引號 ''

2)變數替換後,${} 對應的變數不會加上單引號 ''

區別5、

1)#{} 能防止sql 注入

2)${} 不能防止sql 注入

三、#{} 和 ${} 的例項

假設傳入引數為 1

(1)開始

1)#{}:select * from t_user where uid=#

2)${}:select * from t_user where uid= '$'

(2)然後

1)#{}:select * from t_user where uid= ?

2)${}:select * from t_user where uid= '1'

(3)最後

1)#{}:select * from t_user where uid= '1'

2)${}:select * from t_user where uid= '1'

四、#{} 和 ${} 的大括號中的值

1、單個引數的情形

1)#{},無mybatis 預設值,可任意,且與引數名無關

a、使用 mybatis 預設值 value,即 $

b、使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

2、多個引數的情形

1)#{}

a/使用mybatis 預設值 arg0、arg1、arg2 … 或 param1、param2、param3 …

<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

<1>使用mybatis 預設值 arg0、arg1、arg2 … 或 param1、param2、param3 …

<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

注:@param("") 是 @param(value="") 的簡寫

5、#{} 和 ${} 在使用中的技巧和建議

(1)不論是單個引數,還是多個引數,一律都建議使用註解@param("")

(2)能用 #{} 的地方就用 #{},不用或少用 ${}

(3)表名作引數時,必須用 ${}。如:select * from $

(4)order by 時,必須用 ${}。如:select * from t_user order by $

(5)使用 ${} 時,要注意何時加或不加單引號,即 ${} 和 '${}'

myBatis中 和 區別

1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接顯示生成在sql中。如 order by u...

mybatis 中 和 區別

在使用mybatis 框架時 在xml的配置檔案中,通常是使用 來獲取數值的 如 select from t user inf where id 這時 如果你傳入的值為zhangsan 則會編譯成為 select from t user inf where id zhangsan mybatis 會...

Mybatis 中 和 區別

號與 區別 號表示引數,代表乙個字串。如 select a,b,c from table1 where id value 傳入引數後如 value 1 則可生成 select a,b,c from table1 where id 1 select a,b,c from table1 where ci...