<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Hibernate防止sql注入

      Hibernate中對動態查詢參數綁定提供了豐富的支持,那么什么是查詢參數動態綁定呢?其實如果我們熟悉傳統JDBC編程的話,我們就不難理解查詢參數動態綁定,如下代碼傳統JDBC的參數綁定:
      PrepareStatement pre=connection.prepare(“select * from User where user.name=?”);
      pre.setString(1,”zhaoxin”);
      ResultSet rs=pre.executeQuery();
      在Hibernate中也提供了類似這種的查詢參數綁定功能,而且在Hibernate中對這個功能還提供了比傳統JDBC操作豐富的多的特性,在Hibernate中共存在4種參數綁定的方式,下面我們將分別介紹:
      A、 按參數名稱綁定:
      在HQL語句中定義命名參數要用”:”開頭,形式如下:
      Query query=session.createQuery(“from User user where user.name=:customername and user:customerage=:age ”);
      query.setString(“customername”,name);
      query.setInteger(“customerage”,age);
      上面代碼中用:customername和:customerage分別定義了命名參數customername和customerage,然后用Query接口的setXXX()方法設定名參數值,setXXX()方法包含兩個參數,分別是命名參數名稱和命名參數實際值。
      B、 按參數位置邦定:
      在HQL查詢語句中用”?”來定義參數位置,形式如下:
      Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);
      query.setString(0,name);
      query.setInteger(1,age);
      同樣使用setXXX()方法設定綁定參數,只不過這時setXXX()方法的第一個參數代表邦定參數在HQL語句中出現的位置編號(由0開始編號),第二個參數仍然代表參數實際值。
      注:在實際開發中,提倡使用按名稱邦定命名參數,因為這不但可以提供非常好的程序可讀性,而且也提高了程序的易維護性,因為當查詢參數的位置發生改變時,按名稱邦定名參數的方式中是不需要調整程序代碼的。
      C、 setParameter()方法:
      在Hibernate的HQL查詢中可以通過setParameter()方法邦定任意類型的參數,如下代碼:
      String hql=”from User user where user.name=:customername ”;
      Query query=session.createQuery(hql);
      query.setParameter(“customername”,name,Hibernate.STRING);
      如上面代碼所示,setParameter()方法包含三個參數,分別是命名參數名稱,命名參數實際值,以及命名參數映射類型。對于某些參數類型setParameter()方法可以更具參數值的Java類型,猜測出對應的映射類型,因此這時不需要顯示寫出映射類型,像上面的例子,可以直接這樣寫:
      query.setParameter(“customername”,name);但是對于一些類型就必須寫明映射類型,比如java.util.Date類型,因為它會對應Hibernate的多種映射類型,比如Hibernate.DATA或者Hibernate.TIMESTAMP。

      D、 setProperties()方法:
      在Hibernate中可以使用setProperties()方法,將命名參數與一個對象的屬性值綁定在一起,如下程序代碼:
      Customer customer=new Customer();
      customer.setName(“pansl”);
      customer.setAge(80);
      Query query=session.createQuery(“from Customer c where c.name=:name and c.age=:age ”);
      query.setProperties(customer);
      setProperties()方法會自動將customer對象實例的屬性值匹配到命名參數上,但是要求命名參數名稱必須要與實體對象相應的屬性同名。
      這里還有一個特殊的setEntity()方法,它會把命名參數與一個持久化對象相關聯,如下面代碼所示:
      Customer customer=(Customer)session.load(Customer.class,”1”);
      Query query=session.createQuery(“from Order order where order.customer=:customer ”);
      query. setEntity(“customer”,customer);
      List list=query.list();
      上面的代碼會生成類似如下的SQL語句:
      Select * from order where customer_ID=’1’;

    posted on 2014-05-28 09:47 順其自然EVO 閱讀(306) 評論(1)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

    評論

    # re: Hibernate防止sql注入 2014-05-29 09:02 IT前線


    真心不想用hibernate了,用到深處老是出問題,可能是自己水平不夠吧,一般前臺傳來的數據,要經過處理,

    http://www.itqx.net  回復  更多評論   

    <2014年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲AV手机在线观看| 天天摸天天碰成人免费视频| 久久亚洲国产成人精品无码区| 国产亚洲精品美女久久久久久下载 | 国产高清免费观看| 亚洲欧美日韩一区二区三区在线| 欧美大尺寸SUV免费| 亚洲日本乱码卡2卡3卡新区| 最近中文字幕无免费视频| 国产亚洲精aa在线看| 免费看的黄色大片| 青青久久精品国产免费看| AV在线亚洲男人的天堂| 中文字幕在线观看免费| 亚洲精品福利视频| 99无码人妻一区二区三区免费 | 成人亚洲国产va天堂| 日日夜夜精品免费视频| 黄色三级三级免费看| 久久亚洲高清观看| 91精品啪在线观看国产线免费| 亚洲国产精品综合久久网各| 免费无码黄网站在线观看| 国产高清视频免费在线观看| 久久精品亚洲中文字幕无码网站 | 色在线亚洲视频www| 日韩a级毛片免费观看| 人人公开免费超级碰碰碰视频| 狠狠亚洲狠狠欧洲2019| 国产成人免费午夜在线观看 | 羞羞视频在线观看免费| 亚洲日韩欧洲无码av夜夜摸| 亚洲黄色片免费看| 婷婷亚洲综合一区二区| 亚洲av中文无码乱人伦在线播放| 成人免费视频69| 亚洲日韩在线观看免费视频| 亚洲精品在线免费观看视频| 四虎影视永久免费观看网址| 国产精品视频白浆免费视频| 亚洲av日韩aⅴ无码色老头|