一、在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...