hibernate共分為三種查詢:hql,criteria,原生sql
hibernate自創運算元據庫的查詢語言,屬於物件導向的查詢語言.
hql不會出現任何資料庫相關的資訊
@test
public void testhqlbase()
使用createquery()來建立查詢物件
這裡的hql語句與sql語句不同,hql語句本是這樣的:select * from customer,但是因為是查詢*,所以可以省略select *,然後from後的並非資料庫表,因為hql是物件導向的,所以其實這個customer是實體類.請看上面標紅的那句話!
然後執行hql語句是使用的session的createquery(hql),獲得多個資料使用list(),獲得單個資料使用uniqueresult()方法
@test
public void testhql1()
注意hql語句中沒有資料庫的東西就可以,
當然,我們也可以使用佔位符?
於是就要用到setparameter()方法來給佔位符賦值了
類似這樣:
如果在專案中?的順序總是改變,這時候我們使用?作為佔位符就不太好用了因此,hibernate給我們準備了另外一種自定義佔位符
這裡故意寫了ccc為的就是說明這是自定義的,而我們一般規範的寫cust_id,但其實寫什麼都可以的!
@test
public void testhql2()
這裡要注意hql語句中沒有limit,而是使用了setfirstresult()與setmaxresult()來設定limit?,?的兩個佔位符
hibernate自創,徹底無語句物件導向查詢.
@test
public void testcriteria1()
使用createcriteria()建立criteria查詢物件.
因為是,無語句,所以也就沒有了hql的什麼form class了,所以我們在建立了查詢物件時就指定返回的是那個實體類.
@test
public void testcriteria2()
條件查詢,這裡使用了乙個restrictions類提供眾多的方法,比如isnull()等
這裡與hql差不多,如果我們要分頁的話還要知道總行數,這裡就用到了聚合函式獲得總行數的需求
使用如下**,設定查詢的聚合函式:
// 建立criteria查詢物件
criteria c = session.createcriteria(customer.class);
c.setprojection(projections.rowcount());
long count = (long) c.uniqueresult();
@test
public void testsql()
//關閉資源
session.close();
}
這個應該很熟悉,只是生成查詢物件的方法是createsqlquery(),然後查詢的每一行是乙個object陣列,如果我們先用物件customer代替object請看下邊,使用addentity(class)
@test
public void testsql2()
其中,因為使用了addentity(class)方法,所以查詢結果返回的不是object而是class實體類customer,這裡設定引數用到的setparameter()之前也用過.
@test
public void testsql3()
hibernate中三種狀態
1.session的主要功能是提供對對映的實體類例項的建立,讀取和刪除操作。2.例項可能以下面三種狀態存在 自由狀態 transient 不曾進行持久化,未與任何session相關聯 持久化狀態 persistent 僅與乙個session相關聯 游離狀態 detached 已經進行過持久化,但當前...
Hibernate之物件三種狀態
hibernate 物件三種狀態 transient瞬時狀態 persistent持久狀態 detached游離狀態 瞬時狀態 用new建立的物件,沒有被持久化,沒有處於session中 表示該實體物件在記憶體中是自由存在的,也就是說與資料庫中的資料沒有任何的關聯,與session沒有任何關係,也就...
hibernate物件的三種狀態
對於hibernate,我想不在這裡講解了,我們就直接進入主題 在這裡我將要說的是 hibernate物件的三種狀態 物件是我們十分熟悉的,對吧 而對於物件它有三種狀態 分別是瞬態,持久態和游離態.下面讓我來分別介紹一下三種狀態 第一種 瞬態 表示該實體物件在記憶體中是自由存在的,也就是說與資料庫中...