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