1. 程式人生 > 其它 >mybatis中$和#區別

mybatis中$和#區別

正確的答案是:#{}是預編譯處理,${}是字串替換。

備註:${}是插值,插值的新認識見:http://www.mybatis.cn/archives/653.html

(1)mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值。

(2)mybatis在處理${}時,就是把${}替換成變數的值。

(3)使用#{}可以有效的防止SQL注入,提高系統安全性。原因在於:預編譯機制。預編譯完成之後,SQL的結構已經固定,即便使用者輸入非法引數,也不會對SQL的結構產生影響,從而避免了潛在的安全風險。

(4)預編譯是提前對SQL語句進行預編譯,而其後注入的引數將不會再進行SQL編譯。我們知道,SQL注入是發生在編譯的過程中,因為惡意注入了某些特殊字元,最後被編譯成了惡意的執行操作。而預編譯機制則可以很好的防止SQL注入。

補充1:

$符號一般用來當作佔位符,常使用Linux指令碼的人應該對此有更深的體會吧。例如:$1,$2等等表示輸入引數的佔位符。知道了這點就能很容易區分$和#,從而不容易記錯了。