1、#{}會在處理時,將引數變為佔位符—「?」,來代替引數。而傳入的引數將會經過preparedstatement方法的強制型別檢查和安全檢查等處理,最後作為乙個合法的字串傳入。
2、#{}會將傳過來的引數先進行預編譯,預編譯後再執行
3、並且會為傳過來的引數自動加上單引號
4、最重要的是由於進行了預編譯,會有效的防止sql注入,增強安全性
5、能用#{}的時候盡量使用#{},減少${}的使用,
下面的例子,這種情況尤其要使用#{},能有效防止sql注入
select
*from blog where user_id =
#
1、${}只是將引數進行了拼接,沒有強制型別檢查和安全檢查等處理
2、${}不會將傳過來的引數進行預編譯,${}的原理就是字串的拼接
3、並且不會為傳過來的引數加上單引號
4、由於未進行預編譯,所以${}不會防止sql注入,安全性低
5、${}通常都使用在order by ,limit等的後面,這時候${}更靈活。
下面的例子中如果使用#{},執行會sql報錯,因為預編譯會使numcount外多了單引號,變為
select
*from blog order
by'numcount'
${}在這個時候使用就比較完美了。
select
*from blog order
by $
綜上所述,在mybatis中要優先使用#{},考慮到安全和效能#{}會更好一些。 你真的了解MyBatis中 和 的區別嗎?
mybatis提供了兩種支援動態sql的語法 和 select from t user where username select from t user where username username傳參一致的話,這兩種執行的結果是一樣的,但是這兩種方式在動態sql解析階段的處理是不一樣的。解析為...
你真的了解iaas PaaS SaaS的區別嗎?
1 什麼是iaas paas和saas?iaas 基礎設施即服務 基礎設施即服務 iaas 提供了雲計算基礎架構,包括伺服器 儲存 網路和作業系統。客戶無需購買伺服器 軟體 資料庫空間或網路裝置,只要按需購買這些資源的外包服務。一些大的iaas公司包括amazon,microsoft,vmware,...
你真的了解Java嗎?
三目運算子規則 如果第二個和第三個運算元具有相同的型別,那麼它就是條件表示式的類 型。換句話說,你可以通過繞過混合型別的計算來避免 煩。如果乙個運算元的型別是 t,t 表示 byte short 或 char,而另乙個運算元是乙個 int 型別的常量表示式,它的值是可以用型別 t 表示的,那麼條件表...