mybatis #{} 和${} 使用場景及相關注意事項

  1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值爲order by “111”, 如果傳入的值是id,則解析成的sql爲order by “id”.
  2. $將傳入的數據直接顯示生成在sql中。如:order by useriduser_id,如果傳入的值是111,那麼解析成sql時的值爲order by user_id, 如果傳入的值是id,則解析成的sql爲order by id.
  3. #方式能夠很大程度防止sql注入。
      
    4.$方式無法防止Sql注入。

5.KaTeX parse error: Expected 'EOF', got '#' at position 32: …傳入表名.    6.一般能用#̲的就別用.

MyBatis排序時使用order by 動態參數時需要注意,用$而不是#

字符串替換
默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性並以它爲背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這裏MyBatis不會修改或轉義字符串。

重要:接受從用戶輸出的內容並提供給語句中不變的字符串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些字段,或者通常自行轉義並檢查。

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