Hibernate教程-Hibernate查询标准语言 (HCQL)
Hibernate Criteria Query Language (HCQL) 用于基于特定标准获取记录。Criteria接口提供了应用各种条件的方法,例如检索所有工资大于50000的记录。
HCQL的优势
HCQL提供了添加条件的方法,因此Java程序员可以很容易地在查询中添加条件。Java程序员能够在一个查询中添加许多条件。
Criteria接口
Criteria接口提供了许多指定条件的方法。Criteria对象可以通过Session接口的 createCriteria() 方法获得。
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类提供可用作Criterion的方法。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) 设置给定属性的 like 约束。
Order类
Order类表示一个排序。Order类常用的方法如下:
- public static Order asc(String propertyName) 基于给定属性应用升序排序。
- public static Order desc(String propertyName) 基于给定属性应用降序排序。
Hibernate Criteria Query Language示例
以下是一些HCQL的示例。
获取所有记录的HCQL示例
Criteria c = session.createCriteria(Emp.class); // 传递Class类参数
List list = c.list();
获取第10到第20条记录的HCQL示例
Criteria c = session.createCriteria(Emp.class);
c.setFirstResult(10);
c.setMaxResult(20);
List list = c.list();
获取工资大于10000的记录的HCQL示例
Criteria c = session.createCriteria(Emp.class);
c.add(Restrictions.gt("salary", 10000)); // salary是属性名
List list = c.list();
基于工资升序获取记录的HCQL示例
Criteria c = session.createCriteria(Emp.class);
c.addOrder(Order.asc("salary"));
List list = c.list();
带投影的HCQL
我们可以通过投影来获取特定列的数据,比如姓名。以下是一个仅打印表中NAME列数据的简单示例。
Criteria c = session.createCriteria(Emp.class);
c.setProjection(Projections.property("name"));
List list = c.list();
这些示例展示了如何使用Hibernate Criteria Query Language来构建和执行基于特定条件的查询。HCQL的面向对象方法使得查询更容易理解和管理。