mybatis中$和#有什么區別?為什么?


1.Mybatis 的Mapper.xml語句中parameterType向SQL語句傳參有兩種方式:#{}和${}
我們經常使用的是#{},是因為這種方式可以防止SQL注入,#{}這種方式SQL語句是經過預編譯的,它把#{}中間的參數轉義成字符串。
比如:
select * from table where name = #{zhangSan}
預編譯后,會動態解析成一個參數標記符?:
select * from table where name = ?
而使用${}在動態解析時候,會傳入參數字符串
select * from table where name = ${zhangSan} 
動態解析時候,會傳入參數字符串
select * from table where name = 'zhangSan'
總結:
#{} 這種取值是編譯好SQL語句再取值     即    #{}:動態解析 -> 預編譯 -> 執行
${} 這種是取值以后再去編譯SQL語句     即    ${}:動態解析 -> 編譯 -> 執行
#傳入的參數在SQL中顯示為字符串(當成一個字符串),會對自動傳入的數據加一個雙引號。
$傳入的參數在SqL中直接顯示為傳入的值
${ } 變量的替換階段是在動態 SQL 解析階段,而 #{ }變量的替換是在 DBMS 中。
 

2、#可以防止SQL注入的風險(語句的拼接);但$無法防止Sql注入。

3、$方式一般用於傳入數據庫對象,例如傳入表名。

4、大多數情況下還是經常使用#,一般能用#的就別用$;但有些情況下必須使用$,例:MyBatis排序時使用order by 動態參數時需要注意,用$而不是#。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM