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 $
【#{}和${}的作用其他區別參照statement和preparestatement的編譯和預編譯的區別】
MyBatis中的使用
被這個標記所包含的內容將表示為純文字,比如表示文字內容 此標記用於xml文件中,我們先來看看使用轉義符的情況。我們知道,在xml中,等字元是不能直接存入的,否則xml語法檢查時會報錯,如果想在xml中使用這些符號,必須將其轉義為實體,如 這樣才能儲存進xml文件。在使用程式讀取的時候,解析器會自動將...
MyBatis 和 的使用
mybatis 和katex parse error expected eof got at position 30 y注入問題 簡單說 是經過預編譯的,是安全的,是未經過預編譯的,僅僅是取變數的值,是非安全的,存在sql注入.這裡先說一下只能的情況 ord erby 是肯定只 能用 的情況,ord...
mybatis中CDATA的使用
在使用mybatis 時我們sql是寫在xml 對映檔案中,如果寫的sql中有一些特殊的字元的話,在解析xml檔案的時候會被轉義,但我們不希望他被轉義,所以我們要使用來解決。是什麼,這是xml語法。在cdata內部的所有內容都會被解析器忽略。如果文字包含了很多的 字元 和 字元 就象程式 一樣,那麼...