理解Hibernate:Criteria查询详细指南

需积分: 10 2 下载量 183 浏览量 更新于2024-07-31 收藏 73KB DOC 举报
"Hibernate中Criteria的用法" 在Java持久化框架Hibernate中,Criteria API是一种用于动态构建SQL查询的高级接口。它提供了一种类型安全且面向对象的方式来执行数据库查询,无需编写HQL(Hibernate Query Language)语句。Criteria API的主要优点在于其灵活性和代码的可读性,使得开发者能够更方便地根据业务需求构建复杂的查询条件。 1. QBE (Query By Example) QBE(根据示例查询)是Criteria API的一个简单用法,允许你通过一个实例对象来构建查询条件。例如: ```java Student s = new Student(); s.setName("John"); Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); List<Student> list = cri.list(); ``` 在这个例子中,`Example.create(s)`会基于`s`对象的属性生成查询条件,找出数据库中所有与`s`具有相同属性值的学生记录。 2. QBC (Query By Criteria) QBC(基于标准查询)是Criteria API的核心部分,它包括Criteria、Criterion、Order和Restrictions等类。以下是一个基本的示例: ```java Session session = this.getSession(); Criteria cri = session.createCriteria(JdItemSerialnumber.class); Criterion cron = Restrictions.like("customer", name); cri.add(cron); List<JdItemSerialnumber> list = cri.list(); ``` 在这个例子中,我们创建了一个Criteria对象,然后添加了一个Criterion(条件),即`customer`字段与`name`相匹配的`like`操作。最后,执行查询并返回结果列表。 3. 比较运算符 Criteria API提供了多种比较运算符来构建查询条件: - `Restrictions.eq()`:等于 - `Restrictions.not(Exprission.eq())`:不等于 - `Restrictions.gt()`:大于 - `Restrictions.ge()`:大于等于 - `Restrictions.lt()`:小于 - `Restrictions.le()`:小于等于 - `Restrictions.isnull()`:等于空值 - `Restrictions.isNotNull()`:非空值 - `Restrictions.like()`:字符串模式匹配 - `Restrictions.and()`:逻辑与 - `Restrictions.conjunction()`:逻辑与 - `Restrictions.or()`:逻辑或 - `Restrictions.disjunction()`:逻辑或 - `Restrictions.not()`:逻辑非 - `Restrictions.in(列表)`:等于列表中的某一个值 - `Restrictions.not(Restrictions.in(列表))`:不在列表中的值 这些运算符允许你在构建查询时指定各种条件,如范围查询、空值检查、模式匹配等。 4. 分组与排序 Criteria API还支持分组(Group By)和排序(Order By)操作。你可以使用`setGroupBy()`方法进行分组,使用`addOrder(Order order)`方法进行排序。例如: ```java cri.setGroupBy("age"); cri.addOrder(Order.asc("name")); ``` 这将按照`age`字段分组,并按`name`字段升序排序结果。 5. 联接与子查询 Criteria API也支持连接(Joins)和子查询(Subqueries)。你可以使用`createCriteria()`方法进行连接查询,使用`subquery()`方法创建子查询。 6. 分页查询 为了实现分页,可以使用`setFirstResult()`和`setMaxResults()`方法。例如: ```java cri.setFirstResult(startIndex).setMaxResults(pageSize); ``` 这将返回从`startIndex`开始的`pageSize`条记录。 Hibernate的Criteria API提供了一种强大的、灵活的查询机制,使得开发者可以在不写SQL的情况下,根据对象模型构建出复杂的查询,提高了代码的可读性和维护性。