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 小羅 閱讀(743) 評論(0)  編輯  收藏


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


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

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Web Framework

          常上的技術網站

          查找資料的java網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 剑河县| 罗源县| 同仁县| 青铜峡市| 正阳县| 灵山县| 嘉黎县| 蒙自县| 酒泉市| 民勤县| 冕宁县| 云梦县| 金门县| 娱乐| 成都市| 余干县| 四子王旗| 巢湖市| 隆化县| 陆川县| 平陆县| 乐陵市| 江城| 汉寿县| 星座| 葫芦岛市| 平远县| 临夏市| 高邑县| 巩义市| 阿坝县| 巨鹿县| 石林| 吴忠市| 开阳县| 昭平县| 郴州市| 托克托县| 兴安盟| 拉萨市| 广东省|