1. 程式人生 > >mybatis中#{}和${}的區別詳解

mybatis中#{}和${}的區別詳解

 一:在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}.