1. 程式人生 > 其它 >MyBatis中 #{}與${}的區別

MyBatis中 #{}與${}的區別

先說結論:我們常用的是 #{},因為它可以防止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注入的危險
[ 版權宣告 ]: 本文所有權歸作者本人,文中參考的部分已經做了標記! 商業用途轉載請聯絡作者授權! 非商業用途轉載,請標明本文連結及出處!