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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    Hibernate防止sql注入

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

      D、 setProperties()方法:
      在Hibernate中可以使用setProperties()方法,將命名參數(shù)與一個對象的屬性值綁定在一起,如下程序代碼:
      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對象實例的屬性值匹配到命名參數(shù)上,但是要求命名參數(shù)名稱必須要與實體對象相應的屬性同名。
      這里還有一個特殊的setEntity()方法,它會把命名參數(shù)與一個持久化對象相關聯(lián),如下面代碼所示:
      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了,用到深處老是出問題,可能是自己水平不夠吧,一般前臺傳來的數(shù)據(jù),要經(jīng)過處理,

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

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

    導航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: mm1313亚洲国产精品无码试看 | 亚洲av无码成人精品区| 老司机69精品成免费视频| 亚洲a∨国产av综合av下载 | 免费在线黄色电影| 男女猛烈xx00免费视频试看| 亚洲中文字幕人成乱码| 亚洲乱亚洲乱淫久久| 久久亚洲国产精品123区| 国产真实伦在线视频免费观看| 黄在线观看www免费看| 久久久精品免费国产四虎| 国产精品偷伦视频免费观看了| 日韩欧美亚洲中文乱码| 亚洲一区二区三区高清在线观看 | 黄色网站软件app在线观看免费 | www亚洲精品少妇裸乳一区二区| 妞干网在线免费观看| 精品免费久久久久久久| 99久在线国内在线播放免费观看| 日韩精品无码免费专区午夜| 一进一出60分钟免费视频| 野花视频在线官网免费1| 羞羞视频免费观看| 国产亚洲精彩视频| 在线看亚洲十八禁网站| 色费女人18女人毛片免费视频| 亚洲风情亚Aⅴ在线发布| 亚洲a∨无码精品色午夜| 国产成人高清亚洲一区久久| 18禁亚洲深夜福利人口| 国产精品亚洲综合| 特黄特色的大片观看免费视频| 理论片在线观看免费| 一级毛片视频免费观看| 日韩在线一区二区三区免费视频| 四虎精品免费永久免费视频| 久久er国产精品免费观看8| 91视频免费观看高清观看完整| 中国在线观看免费的www| 最近更新免费中文字幕大全|