Hibernate標準查詢語言


Hibernate標準(Criteria)查詢語言(HCQL)用於根據具體條件獲取記錄。Criteria介面提供了應用標準的方法,例如檢索薪水大於50000的表的所有記錄。

HCQL的優勢

HCQL提供了新增條件的方法,因此,java程式員可以很容易新增條件。 java程式員能夠在查詢中根據需要新增多個條件。

Criteria介面

Criteria介面提供了許多方法來指定條件。 可以通過呼叫Session介面的createCriteria()方法獲得Criteria物件。

session介面的createCriteria()方法的語法

public Criteria createCriteria(Class c)

常用的Criteria介面方法如下:

  1. public Criteria add(Criterion c) 用於新增限制(條件)。
  2. public Criteria addOrder(Order o) 指定排序順序。
  3. public Criteria setFirstResult(int firstResult) 指定要檢索的第一個記錄數。
  4. public Criteria setMaxResult(int totalResult) 指定要檢索的記錄總數。
  5. public List list() 返回包含物件的列表。
  6. public Criteria setProjection(Projection projection) 指定投影。

Restrictions類

Restrictions類提供可用作標準的方法。 常用的Restrictions類方法如下:

  1. public static SimpleExpression lt(String propertyName,Object value) 將給定屬性的約束設定為小於約束。
  2. public static SimpleExpression le(String propertyName,Object value) 設定給定屬性的小於或等於約束。
  3. public static SimpleExpression gt(String propertyName,Object value) 設定給定屬性的大於約束。
  4. public static SimpleExpression ge(String propertyName,Object value) 設定給定屬性的大於或等於約束。
  5. public static SimpleExpression ne(String propertyName,Object value) 對給定的屬性設定不相於約束。
  6. public static SimpleExpression eq(String propertyName,Object value) 設定約束與給定屬性相等。
  7. public static Criterion between(String propertyName, Object low, Object high) 設定約束之間範圍。
  8. public static SimpleExpression like(String propertyName, Object value) 將類似的約束設定為給定的屬性。

Order類

Order類代表排序順序。常用的 Restrictions 類方法如下:

  1. public static Order asc(String propertyName) 適用於給定屬性的基礎上,按升序排列。
  2. public static Order desc(String propertyName) 適用於給定屬性的基礎上,按降序排列。

Hibernate標準查詢語言的範例

下面將給出一些HCQL的例子。

獲取所有記錄的HCQL範例

Crietria c=session.createCriteria(Emp.class);//passing Class class argument  
List list=c.list();

HCQL獲得第10到20個記錄的例子

Crietria c=session.createCriteria(Emp.class);  
c.setFirstResult(10);  
c.setMaxResult(20);  
List list=c.list();

HCQL獲取薪資大於10000的記錄範例

Crietria c=session.createCriteria(Emp.class);  
c.add(Restrictions.gt("salary",10000));//salary is the propertyname  
List list=c.list();

以薪酬(Salary)為基礎升序排序記錄的HCQL範例

Crietria c=session.createCriteria(Emp.class);  
c.addOrder(Order.asc("salary"));  
List list=c.list();

HCQL及投影

我們可以通過諸如name等的投影來獲取特定列的資料。下面來看一下簡單的投影範例,僅列印表的name列的資料。

Criteria c=session.createCriteria(Emp.class);  
c.setProjection(Projections.property("name"));  
List list=c.list();