当前位置:K88软件开发文章中心编程语言SQLHibernate → 文章内容

Hibernate 标准查询

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-18 8:34:25

由 北公爵无欢 创建, 最后一次修改 2016-08-12 标准查询Hibernate 提供了操纵对象和相应的 RDBMS 表中可用的数据的替代方法。一种方法是标准的 API,它允许你建立一个标准的可编程查询对象来应用过滤规则和逻辑条件。 Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例。 以下是一个最简单的标准查询的例子,它只是简单地返回对应于员工类的每个对象: Criteria cr = session.createCriteria(Employee.class); List results = cr.list(); 对标准的限制你可以使用 Criteria 对象可用的 add() 方法去添加一个标准查询的限制。 以下是一个示例,它实现了添加一个限制,令返回工资等于 2000 的记录: Criteria cr = session.createCriteria(Employee.class); cr.add(Restrictions.eq("salary", 2000)); List results = cr.list(); 以下是几个例子,涵盖了不同的情况,可按要求进行使用: Criteria cr = session.createCriteria(Employee.class);// To get records having salary more than 2000cr.add(Restrictions.gt("salary", 2000));// To get records having salary less than 2000cr.add(Restrictions.lt("salary", 2000));// To get records having fistName starting with zaracr.add(Restrictions.like("firstName", "zara%"));// Case sensitive form of the above restriction.cr.add(Restrictions.ilike("firstName", "zara%"));// To get records having salary in between 1000 and 2000cr.add(Restrictions.between("salary", 1000, 2000));// To check if the given property is nullcr.add(Restrictions.isNull("salary"));// To check if the given property is not nullcr.add(Restrictions.isNotNull("salary"));// To check if the given property is emptycr.add(Restrictions.isEmpty("salary"));// To check if the given property is not emptycr.add(Restrictions.isNotEmpty("salary"));你可以模仿以下示例,使用逻辑表达式创建 AND 或 OR 的条件组合: Criteria cr = session.createCriteria(Employee.class);Criterion salary = Restrictions.gt("salary", 2000);Criterion name = Restrictions.ilike("firstNname","zara%");// To get records matching with OR condistionsLogicalExpression orExp = Restrictions.or(salary, name);cr.add( orExp );// To get records matching with AND condistionsLogicalExpression andExp = Restrictions.and(salary, name);cr.add( andExp );List results = cr.list();另外,上述所有的条件都可按之前的教程中解释的那样与 HQL 直接使用。 分页使用标准这里有两种分页标准接口方法: 序号方法描述1public Criteria setFirstResult(int firstResult),这种方法需要一个代表你的结果集的第一行的整数,以第 0 行为开始。2public Criteria setMaxResults(int maxResults),这个方法设置了 Hibernate 检索对象的 maxResults。利用上述两种方法结合在一起,我们可以在我们的 Web 或 Swing 应用程序构建一个分页组件。以下是一个例子,利用它你可以一次取出 10 行:Criteria cr = session.createCriteria(Employee.class);cr.setFirstResult(1);cr.setMaxResults(10);List results = cr.list();排序结果标准 API 提供了 org.hibernate.criterion.order 类可以去根据你的一个对象的属性把你的排序结果集按升序或降序排列。这个例子演示了如何使用 Order 类对结果集进行排序: Criteria cr = session.createCriteria(Employee.class);// To get records having salary more than 2000cr.add(Restrictions.gt("salary", 2000));// To sort records in descening ordercrit.addOrder(Order.desc("salary"));// To sort records in ascending ordercrit.addOrder(Order.asc("salary"));List results = cr.list(); 预测与聚合标准 API 提供了 org.hibernate.criterion.projections 类可得到各属性值的平均值,最大值或最小值。Projections 类与 Restrictions 类相似,均提供了几个获取预测实例的静态工厂方法。 以下是几个例子,涵盖了不同的情况,可按要求进行使用: Criteria cr = session.createCriteria(Employee.class);// To get total row count.cr.setProjection(Projections.rowCount());// To get average of a property.cr.setProjection(Projections.avg("salary"));// To get distinct count of a property.cr.setProjection(Projections.countDistinct("firstName"));// To get maximum of a property.cr.setProjection(Projections.max("salary"));// To get minimum of a property.cr.setProjection(Projections.min("salary"));// To get sum of a property.cr.setProjection(Projections.sum("salary")); 标准查询示例考虑下面的 POJO 类: public class Employee { private int id; private String firstName; private String lastName; private int salary; public Employee() {} public Employee(String fname, String lname, int salary) { this.firstName = fname; this.lastName = lname; this.salary = salary; } public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName( String first_name ) { this.firstName = first_name; } public String getLastName() { return lastName; } public void setLastName( String last_name ) { this.lastName = last_name; } public int getSalary() { return salary; } public void setSalary( int salary ) { this.salary = salary; }}让我们创建以下员工表来存储 Employee 对象:create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) defaul

[1] [2] [3]  下一页


Hibernate 标准查询