mybatis 中 #{} 和 ${} 的區別
1、在mybatis 的對映配置檔案中,動態傳遞引數有兩種方式:
(1)#{} 佔位符
(2)${} 拼接符
2、#{} 和 ${} 的區別
(1)1)#{} 為引數佔位符 ?,即sql 預編譯
2)${} 為字串替換,即 sql 拼接
(2)1)#{}:動態解析 -> 預編譯 -> 執行
2)${}:動態解析 -> 編譯 -> 執行
(3)1)#{} 的變數替換是在dbms 中
2)${} 的變數替換是在 dbms 外
(4)1)變數替換後,#{} 對應的變數自動加上單引號 ''
2)變數替換後,${} 對應的變數不會加上單引號 ''
(5)1)#{} 能防止sql 注入
2)${} 不能防止sql 注入
3、#{} 和 ${} 的例項:假設傳入引數為 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'
4、#{} 和 ${} 的大括號中的值
(1)單個引數的情形
1)#{}
無mybatis 預設值,可任意,且與引數名無關
<1>使用 mybatis 預設值 value,即 $
<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")
(2)多個引數的情形
1)#{}
<1>使用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...