ibatis中#和$符號的區別

ibatis中#和$符號的區別

 

在我們使用ibatis過程中,寫sqlmap配置文件時經常會用到兩個特殊的傳值符號#和$符合,下面根據個人的分析總結,兩者的區別。

 

1.      數據類型匹配

#:會進行預編譯,而且進行類型匹配;

$:不進行數據類型匹配。

 

如:

變量name的類型是string, 值是"張三"的時候

              $name$ = 張三

              #name# = '張三'

那麼使用$就會報錯,若要使用$的話,需要修改爲’$name$’;

 

2.      實現方式

$ 的作用實際上是字符串拼接,

         select * from users where name= $name$

         等效於

         StringBuffer sb = newStringBuffer(256);

         sb.append("select * from userswhere name=").append(name);

         sb.toString();

 

 #用於變量替換

        select * from users  where name = #name#

        等效於

        prepareStement=stmt.createPrepareStement("select * from users where name = ?")

       prepareStement.setString(1,'張三');

 

3.      #和$使用場景

(1)變量的傳遞, 必須使用#,防止sql注入;# 是用prepareStement,提示效率。

   #方式一般用於傳入添加/修改的值或查詢/刪除的where條件

(2) $只是簡單的字符拼接而已,對於非變量部分, 那隻能使用$, 實際上, 在很多場合,$也是有很多實際意義的

             $方式一般用於傳入數據庫對象.例如傳入表名.

             例如:

             select  * from  $tableName$  對於不同的表執行統一的查詢

             update  $tableName$ set  name = #name#  每個實體一張表,改變不用實體的狀態

             特別說明, $只是字符串拼接,所以要特別小心sql注入問題。

      (3)能同時使用#和$的時候,最好用#。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章