Hibernate查詢相關知識時間:2009-10-04 07:14:25來源:網路作者:未知點擊:146次首先介紹get()和load()方法的差異:
get()方法和load()方法的差異主要在於對二級快取的使用。
load()方法會使用二級緩存,而get()方法在一級快取沒有找到會直接查詢資料庫,不會去二級快取中查找。
get():如果在資料庫先介紹get()和load()方法的差別:
get()方法和load()方法的差異主要在於對二級快取的使用。
load()方法會使用二級緩存,而get()方法在一級快取沒有找到會直接查詢資料庫,不會去二級快取中查找。
get():如果在資料庫中沒有記錄會回傳空,get()無論如何都會回傳資料.
load():如果資料庫中沒有記錄會拋出異常,如果有資料回傳的是一個代理物件。
list和iterator()方法之間的差異:(N+1?)
list()方法執行時,直接執行查詢結果所需的查詢語句。
iterator()方法則是先執行得到物件ID的查詢,然後在根據每個ID值去取得所要查詢的物件。
因此:對於list()方式的查詢通常只會執行一個SQL語句,而對於iterator()方法的查詢則可能需要執行N+1條SQL語句(N為結果集中的記錄數).
結果集的處理方法不同:
list()方法會一次活的所有的結果集對象,而且他會依據查詢的結果初始化所有的結果集對象。如果在結果集非常龐大的時候會佔據非常多的內存,甚至會造成內存溢出的情況發生。
iterator()方法在執行時不會一次初始化所有的對象,而是根據對結果集的存取情況來初始化對象。一次在存取中可以控制快取中物件的數量,以避免佔用過多的緩存,導致記憶體溢出情況的發生。
HQL:HQL是一種物件導向的查詢語言,HQL的操作物件是類別、實例和屬性等。
SQL:sql的操作物件是資料表和列等資料物件。
Hql是完全物件導向的查詢語言,因此可以支援繼承和多條等特徵。
HQL查詢依賴Query類,每個Query實例對應一個查詢物件。
定參數的功能,Query 介面才是真正的HQL查詢介面。
//建立一個Query 對象
Query query = session.createQuery ("from Customer as c where c.name=:customerName and c.age=:customerAge");
//動態綁定參數
query.setString("customerName","Tom");
query.setInteger("customerAge",21);
//執行查詢語句,傳回結果
List result = query.list();
HQL查詢步驟:
1:取得Hibernate Session物件。
2:編寫HQL語句。
3:以HQL語句為參數,呼叫Session的createQuery方法建立查詢物件。
4:如果HQL語句包含參數,呼叫Query的setXXX()方法為參數賦值。
5: 呼叫Query物件的list等方法遍歷查詢結果。
Query也包含兩個方法:
setFirstResult(int firstResult):設定傳回的結果集從第幾筆記錄開始。
setMaxResults(int maxResults):設定本次查詢傳回的結果數。
實體的刪除和更新。
投影查詢:只查詢屬性的一部分。
查詢一個屬性回傳的是字串
查詢二個字段回傳的是數組
動態建構查詢:主要用於數十個表格查詢;
要建構一個新的對象,要加上一個建構子;
在new物件的時候要加上包名
不要使用count(*) 要count(持久化物件)
分組與排序:
Order by子句可以透過asc或desc關鍵字排序
如:form User u Order by u.name asc,u.age desc;
Group by子句與統計查詢:
如: String hql = "select count(u),u.age from User u group by u.age having count(u)>10";
List list = session.createQuery(hql).list();
標準的SQL聚合函數都可以在HQL語句中使用,例如:count(),sum(),max(),min(),age()等
連線查詢:
內連線:inner join
左外連線:left outer join
右外連接:right outer join
全連接:full join(不常用)
迫切外部連線:left outer join fetch,left join
fetch:用於一次獲取連接數據,特別是集合數據。減少與資料庫互動的次數。
left out join:使用做外連接位於left join 左側表的所有記錄及對應的order類別的記錄資訊都會顯示出來。
right out join:與left out join 正好相反,right out join 傳回的是HQL右側表中的所有記錄以及對應的Customer物件記錄資訊。
取得集合資料的四種方式:
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().size();
3:左右迫切連接
4:進階過濾器
條件查詢語句(Criteria Queries):利用物件進行物件查詢。
主要的介面有:Criteria、Criterion和expression_r和Restrictions類別組成。能夠支援在運行時動態生成SQL語句。
條件查詢步驟:
1:透過seesion的CreateCriteria()方法,建立一個Criteria對象
2:設定查詢對象,name指對象的屬性
3:把查詢條件加入到Criteria物件中
4:執行list()查詢回傳結果。
條件查詢透過三個類別完成:
Criteria:代表一次查詢.
Criterion:代表一個查詢條件.
Restrictions:產生查詢條件的工具類別.
本文來自CSDN博客,轉載請標示: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx