Hibernate標準查詢語言
Hibernate標準(Criteria)查詢語言(HCQL)用於根據具體條件獲取記錄。Criteria接口提供了應用標準的方法,例如檢索薪水大於50000的表的所有記錄。
HCQL的優勢
HCQL提供了添加條件的方法,因此,java程序員可以很容易添加條件。 java程序員能夠在查詢中根據需要添加多個條件。
Criteria接口
Criteria
接口提供了許多方法來指定條件。 可以通過調用Session接口的createCriteria()
方法獲得Criteria
對象。
session接口的createCriteria()方法的語法
public Criteria createCriteria(Class c)
常用的Criteria
接口方法如下:
-
public Criteria add(Criterion c)
用於添加限制(條件)。 -
public Criteria addOrder(Order o)
指定排序順序。 -
public Criteria setFirstResult(int firstResult)
指定要檢索的第一個記錄數。 -
public Criteria setMaxResult(int totalResult)
指定要檢索的記錄總數。 -
public List list()
返回包含對象的列表。 -
public Criteria setProjection(Projection projection)
指定投影。
Restrictions類
Restrictions
類提供可用作標準的方法。 常用的Restrictions
類方法如下:
-
public static SimpleExpression lt(String propertyName,Object value)
將給定屬性的約束設置爲小於約束。 -
public static SimpleExpression le(String propertyName,Object value)
設置給定屬性的小於或等於約束。 -
public static SimpleExpression gt(String propertyName,Object value)
設置給定屬性的大於約束。 -
public static SimpleExpression ge(String propertyName,Object value)
設置給定屬性的大於或等於約束。 -
public static SimpleExpression ne(String propertyName,Object value)
對給定的屬性設置不相於約束。 -
public static SimpleExpression eq(String propertyName,Object value)
設置約束與給定屬性相等。 -
public static Criterion between(String propertyName, Object low, Object high)
設置約束之間範圍。 -
public static SimpleExpression like(String propertyName, Object value)
將類似的約束設置爲給定的屬性。
Order類
Order
類代表排序順序。常用的 Restrictions
類方法如下:
-
public static Order asc(String propertyName)
適用於給定屬性的基礎上,按升序排列。 -
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();