1. 程式人生 > >Hibernate中的五種資料檢索方式

Hibernate中的五種資料檢索方式

Hibernate檢索資料的五種方式:

1.導航物件圖檢索方式。(根據已經載入的物件,導航到其他物件。)

2.OID檢索方式。(按照物件的OID來檢索物件。)

3.HQL檢索方式。(使用面向物件的HQL查詢語言。)

4.QBC檢索方式。(使用QBC(Qurey By Criteria) API來檢索物件。)

5.本地SQL檢索方式。(使用本地資料庫的SQL查詢語句。)

1、導航物件圖檢索方式

利用類與類之間的關係來檢索物件。譬如我們要查詢一份訂單,就可以由訂單物件自動導航找到訂單所屬的客戶物件。當然,前提是必須在物件-關係對映檔案上配置了它們的多對一的關係。

Order order = (Order)session.get(Order.class,1);

Customer customer = order.getCustomer();

2、OID檢索方式

主要指用Session的get()和load()方法載入某條記錄對應的物件。

Customer customer = (Customer)session.get(Customer.class,1);

Customer customer = (Customer)session.load(Customer.class,1);

3、HQL檢索方式

HQL(Hibernate Query Language)是面向物件的查詢語言,它和SQL查詢語言有些相似。在Hibernate提供的各種檢索方式中,HQL是使用最廣的一種檢索方式。它具有以下功能:

在查詢語句中設定各種查詢條件。

支援投影查詢,即僅檢索出物件的部分屬性。

支援分頁查詢。

支援分組查詢,允許使用group by和having關鍵字。

提供內建聚集函式,如sum()、min()和max()。

能夠呼叫使用者定義的SQL函式。

支援子查詢,即巢狀查詢。

支援動態繫結引數。

Session類的Qurey介面支援HQL檢索方式,它提供了以上列出的各種查詢功能。

注:Qurey介面支援方法鏈程式設計風格,它的set方法都返回自身例項,而不是返回void型別。方法鏈程式設計風格能使程式程式碼更加簡潔。

示例程式碼:

Query query = session.createQuery("from Customeras c where " +"c.name=:customerName andc.age=:customerAge");

// 動態繫結引數 query.setString("customerName", "Test"); query.setInteger("customerAge", 21);

// 執行檢索 Listresult = query.list();

// 方法鏈程式設計風格 Listresult1 = session.createQuery( "from Customer as c wherec.name=:customerName and c.age=:customerAge").setString("customerName", "Test").setInteger("customerAge",21) .list();

4、QBC(Qurey ByCriteria)檢索方式

採用HQL檢索方式時,在應用程式中需要定義基於字串形式的HQL查詢語句。QBC API提供了檢索物件的另一種方式,它主要由Criteria介面、Criterion介面和Expression類組成,它支援在執行時動態生成查詢語句。

示例程式碼:

Criteria criteria =session.createCriteria(Customer.class);

Criterion criterion1 = Expression.like("namr","T%");

Criterion criterion2 = Expression.eq("age", newInteger(21));

criteria = criteria.add(criterion1);

criteria = criteria.add(criterion2);

// 執行檢索 Listresult = criteria.list();

// 方法鏈程式設計風格 Listresult1 =session.createCriteria(Customer.class).add(Expression.like("namr""T%")).add(Expression.

eq("age", new Integer(21))).list();

Hibernate還提供了QBE(Qurey By Example)檢索方式,它是QBC的子功能。QBE允許先建立一個隨想模板,然後檢索出和這個樣板相同的物件。

示例程式碼:

Customer exampleCustomer=new Customer();

exampleCustomer.setAge(21);

List result1 = session.createCriteria(Customer.class).add(Example.create(exampleCustomer)).list();

QBE的功能不是特別強大,僅在某些場合下有用。一個典型的使用場合就是在查詢視窗中讓使用者輸入一系列的查詢條件,然後返回匹配的物件。QBE方式目前只能支援物件屬性欄位的等於查詢和字串的模糊匹配,不能支援區間,或者,大於等操作。在這些情況下,還是採用HQL檢索方式或QBC檢索方式。

5、本地SQL檢索方式

採用HQL或QBC檢索方式時,Hibernate生成標準的SQL查詢語句,使用於所有的資料庫平臺,因此這兩種檢索方式都是跨平臺的。有的應用程式可能需要根據底層資料庫的SQL方言,來生成一些特殊的查詢語句。在這種情況下,可以利用Hibernate提供的SQL檢索方式。

示例程式碼:

Query query = session.createSQLQuery("select {c.*} from CUSTOMER as cwhere c.NAME like :customerName andc.AGE=:customerAge");

// 動態繫結引數 query.setString("customerName", "Test"); query.setInteger("customerAge", 21);

// 執行檢索 List result = query.list();

以上我們看到了五種檢索方式的應用。