熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Hibernate:HQL/QBC查詢語言比較的用法

2013-11-23 20:41:38  來源: Java開源技術 

  Hib的檢索方式

   

  導航對象圖檢索方式通過已經加載的對象調erator()方法可以得到order對象

   

  如果是首次執行此方法Hib會從數據庫加載關聯的order對象否則就從緩存中得到

   

  OID檢索方式通過session的getload方法知道了OID的情況下可以使用

   

  HQL檢索方式使用面向對象的HQL查詢語句session的find方法利用HQL來查詢

   

  QBC檢索方式利用QBCAPI來檢索它是封裝了基於字符串的查詢語句

   

  本地的SQL檢索方式使用本地數據庫的SQL查詢語句Hib會負責把檢索到的JDBC結果集映射為持久化對象圖

   

  五種檢索方式的使用場合和特點

   

  HQL 是面向對象的查詢語言同SQL有些相似是Hib中最常用的方式

   

  查詢設定各種查詢條件

   

  支持投影查詢檢索出對象的部分屬性

   

  支持分頁查詢允許使用having和group by

   

  提供內制的聚集函數sum()min()max()

   

  能調用用戶的自定義SQL

   

  支持子查詢嵌入式查詢

   

  支持動態綁定參數

   

  建議使用Query接口替換session的find方法

   

  Query Q = sessioncreateQuery(from customer as c where cname = :customerName + and cage = :customerAge);

  querysetString (customerName tom);

  querysetInteger(customerAge );

  list result = querylist();

  

  QBC :  QBCAPI提供了另一種方式主要是Criteria接口Criterion接口和Expression類

   

  Criteria criteria = sessioncreateCriteria(customerclass);

  Criterion criterion = Expressionlike(namet%);

  Criterion criterion = Expressioneq(agenew Integer());

  Critera = criteriaadd(criterion) ;

  Critera = criteriaadd(criterion) ;

  list result = criterialist();

  

  或是 list result = sessioncreateCriteria(Customerclass)add(Expressioneq(thisnametom))list();

   

  SQL :  采用HQL和QBC檢索時Hib生成SQL語句適用所有數據庫

   

  Query query  = sessioncreateSQLQuery(select {c*} from customers c where cname like : customername + and cage = :customerageccustomercalss);

  querysetString(customernametom);

  querysetInteger(customerage);

  list result = querylist();

  

  /////////////多態查詢

   

  HQL sessioncreateQuery(from employee);

  QBC sessioncreateCriteria(employeeclass);

  HQL : sessioncreateQuery(from hourlyEmployee);

  QBC : sessioncreateCriteria(hourlyEmployeeclass);

  

  下面的HQL查詢語句將檢索出所有的持久化對象

  

  from javalangObject ;

  from javaioserializable ;

  

  ////////////查詢的排序

   

  查詢結果按照客戶姓名升序排列

  

  HQL

  Query query = sessioncreateQuery (from customer c order by cname);

  QBC

  Criteria criteria = sessioncreateCriteria(customerclass);

  criteriaaddOrder(orderasc(name));

  HQL :

  Query query = sessioncreateQuery (from customer c order by cname asc cage desc);

  QBC :

  Criteria criteria = sessioncreateCriteria(customerclass);

  criteriaaddOrder(orderasc (name));

  criteriaaddOrder(orderdesc(age));

   

  import netsfhibernatepressionOrder

  import mypackOrder

  

  Criteria criteria = sessioncreateCritria (mypackOrderclass);

  criteriaaddOrder(netsfhibernateOrderasc(name));

  

  ///////////HQL語句的參數綁定Query接口提供了綁定各種Hib映射類型的方法

   

  setBinary()

  setString()

  setBoolean()

  setByte()

  setCalendar()

  setCharacter()

  setDate()

  setDouble()

  setText()

  setTime()

  setTimestamp()

  setEntity()//把參數與一個持久化類的事例綁定lsit result = sessioncreateQuery(from order o where ocustomer =            :customer)setEntity(customer customer)list ;

  setParameter()//綁定任意類型的參數

  setProperties()//把命名參數與一個對象的屬性值綁定 Query query = sessioncreateQuery(from customer c where cname =:     name + and cage =:age );

  QuerysetProperties(customer);


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28916.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.