Hibernate框架學習 三種查詢

2021-09-21 13:52:47 字數 2247 閱讀 9979

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物件的三種狀態 物件是我們十分熟悉的,對吧 而對於物件它有三種狀態 分別是瞬態,持久態和游離態.下面讓我來分別介紹一下三種狀態 第一種 瞬態 表示該實體物件在記憶體中是自由存在的,也就是說與資料庫中...