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();