MyBatis中 #{}與${}的區別
阿新 • • 發佈:2021-07-19
先說結論:我們常用的是 #{},因為它可以防止SQL注入
1、#{} 是預編譯處理,它會先將SQL中的#{}替換為?號編譯,然後再取值
原始SQL:select * from user where user_name = #{name} 預編譯後:select * from user where user_name = ?
然後呼叫set方法來賦值‘張三’
2、${} 會先去變數值,再去編譯SQL語句
原始SQL: select * from user where user_name = #{name} 編譯後SQL:select * from user where user_name= ‘張三’
這樣很容易會遭到惡意SQL的拼接來非法操作資料
3、#{} 能防止SQL注入的原因如下
因為採用預編譯機制,預編譯完成後,SQL的結構已經固定,[ 版權宣告 ]: 本文所有權歸作者本人,文中參考的部分已經做了標記! 商業用途轉載請聯絡作者授權! 非商業用途轉載,請標明本文連結及出處!
這時候,即使使用者輸入非法的引數,也不會對SQL語句的整體結構造成影響,從而避免了SQL注入的危險