使用 Mybatis 中 # 與 $ 區別

mybatis 框架使用好處之一就是能夠動態的改變 sq l語句,而動態的 sql 語法 #{ } 和 ${ } 則有所不一樣。sql

#:由於mybatis是基於 jdbc 封裝的,# 解析爲 jdbc 預編譯(preparedstatement)的參數標記符,一個 #{} 解析成一個參數佔位符。安全

$:是字符串的替換,在動態 sql 解析階段會進行變量替換。mybatis

注意平時優先使用 #{},由於使用 ${} 會引發 sql 注入。框架

由於在 mybatis 在處理 # 時,會調用 PreparedStatement 的 set 系列方法來賦值, 而且能夠安全地設置參數(=?)的值。由於 sql 語句已經預編譯好了,傳入參數的時候,不會從新生產 sql 語句,安全性高。處理 $ 時,就是把 ${} 替換成變量的值。學習

例:select * from emp where ename = '用戶名',若是使用 $ 入參,用戶名被傳入例如 ‘smith or 1 = 1’,那不管 ename 是否匹配都能查到結果。spa

注意:字符串

若是在特定場景下,使用諸如 order by  ${ param },這時候就能夠使用 $it

總之使用 #{} 能夠有效的防止 SQL 注入,提升系統安全性。編譯

 

水平有限,如有問題請留言交流!變量

互相學習,共同進步:) 轉載請註明出處謝謝!

相關文章
相關標籤/搜索