iBatis中,關于$和#的區別分析

          $ 的作用實際上是字符串拼接,
          select * from $tableName$
          等效于
          StringBuffer sb = new StringBuffer(256);
          sb.append(“select * from “).append(tableName);
          sb.toString();

          #用于變量替換
          select * from table where id = #id#
          等效于
          prepareStement = stmt.createPrepareStement(“select * from table where id = ?”)
          prepareStement.setString(1,’abc’);

          ————————————————

          對于變量部分, 應當使用#, 這樣可以有效的防止sql注入, 未來,# 都是用到了prepareStement,這樣對效率也有一定的提升

          $只是簡單的字符拼接而已,對于非變量部分, 那只能使用$, 實際上, 在很多場合,$也是有很多實際意義的
          例如
          select * from $tableName$ 對于不同的表執行統一的查詢
          update $tableName$ set status = #status# 每個實體一張表,改變不用實體的狀態
          特別提醒一下, $只是字符串拼接, 所以要特別小心sql注入問題。
          總結如下:
          1.#是把傳入的數據當作字符串,如#field#傳入的是id,則sql語句生成是這樣,order by "id",這當然會報錯..

          2.$傳入的數據直接生成在sql里,如#field#傳入的是id,則sql語句生成是這樣,order by id, 這就對了.

          3.#方式能夠很大程度防止sql注入.

          4.$方式無法方式sql注入.

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

          6.一般能用#的就別用$.

          posted on 2011-02-24 10:46 小羅 閱讀(747) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Web Framework

          常上的技術網站

          查找資料的java網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 双柏县| 武山县| 兴山县| 涞水县| 淮北市| 樟树市| 平凉市| 双辽市| 镇远县| 昌吉市| 扎鲁特旗| 涪陵区| 定襄县| 安远县| 梁平县| 邵东县| 邵阳市| 南靖县| 安丘市| 郑州市| 桐城市| 文化| 比如县| 招远市| 山西省| 五指山市| 长汀县| 大荔县| 开化县| 甘泉县| 黑山县| 隆昌县| 东乌| 遂川县| 庄浪县| 顺平县| 遂平县| 宣汉县| 思南县| 六盘水市| 黄龙县|