mybatis處理#{}與${}的區別

關於{param}

首先,{parm} 傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號
如下:

select * from table where title = #{param}

那麼解析成的sql語句爲:

select * from table where title = “id”

關於SQL注入

Sql 注入攻擊是通過將惡意的 Sql 查詢或添加語句插入到應用的輸入參數中,再在後臺 Sql 服務器上解析執行進行的攻擊,它目前黑客對數據庫進行攻擊的最常用手段之一。

想要詳細瞭解SQL注入,下面這篇博客講得很好,可以學習學習:
SQL注入基礎原理(超詳細)

#{}和${}

#{}是預編譯處理
${} 是字符串替換

mybatis在處理 #{} 時,會將sql中的 #{} 替換爲 ? 號,調用JDBC中PreparedStatement的set方法來賦值,mybatis在處理 $ {} 時,就是把 ${ } 替換成變量的值,只是簡單得字符串替換。

使用 #{} 可以有效的防止SQL注入,預編譯的機制。預編譯是提前對SQL語句進行預編譯,而其後注入的參數將不會再進行SQL編譯。SQL注入是發生在編譯的過程中,因爲惡意注入了某些特殊字符,最後被編譯成了惡意的執行操作。而預編譯機制則可以很好的防止SQL注入。提高系統安全性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章