mybatis中#{}和${}的區別詳解
阿新 • • 發佈:2019-01-29
一:在mybatis中最主要的一個特性就是動態sql:
1、 程式設計師通過直接編寫SQL語句,可以直接對SQL進行效能的優化;
2、 學習門檻低,學習成本低。只要有SQL基礎,就可以學習mybatis,而且很容易上手;
3、 由於直接編寫SQL語句,所以靈活多變,程式碼維護性更好。
4、 不能支援資料庫無關性,即資料庫發生變更,要寫多套程式碼進行支援,移植性不好。
5、 需要編寫結果對映。
6、 需求多變的網際網路專案,例如電商專案。
二:在mybatis中#{}表示一個佔位符:
1、#將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號
2、#在很大程度上可以防止sql注入
3、例如#{id}:#{}中的id表示輸入的引數名稱,如果輸入引數是簡單型別,那麼#{}中的引數可以任意。
4、能用#{}就別用${}
在mybatis中${}表示一個拼接符:
1、${}將傳入的資料直接顯示生成在sql中。
2、如果使用${},而你傳入的是字串,比如中文、英文。就必須這樣:'${}',不然會報(Unknown column 'TT' in 'where clause')的錯誤,當然傳入數字沒問題。
3、${value}: ${}中value表示輸入的引數名稱,如果輸入的引數是簡單型別,那麼${}中的值只能是value
4、${}存在sql注入的風險,慎用!但是在特殊場景下必須使用${},比如order by 語句後面要跟動態列,就得使用${colname}.