Hibernate Criteria查询详解:从QBE到复杂条件

需积分: 9 1 下载量 73 浏览量 更新于2024-08-01 收藏 69KB DOC 举报
"本文将详细介绍Hibernate中的Criteria查询机制,包括其基本用法、QueryByExample(QBE)和QueryByCriteria(QBC)的概念以及常见的比较运算符的使用。" 在Java持久化框架Hibernate中,Criteria API提供了一种面向对象的方式来执行数据库查询。Criteria API允许开发者动态构建查询,而无需直接编写SQL语句,这提高了代码的可读性和可维护性。下面我们将深入探讨Criteria的使用。 首先,我们来看QueryByExample(QBE)的概念。QBE允许我们根据一个实例对象来创建查询模板。例如,如果我们有一个`Student`类的实例`s`,其中包含了我们想要匹配的属性值,我们可以创建一个Criteria对象,然后添加Example创建的条件进行查询: ```java Criteriacri = session.createCriteria(Student.class); cri.add(Example.create(s)); List<Student> list = cri.list(); ``` 这段代码会返回所有属性与`s`相匹配的`Student`对象。 接下来是QueryByCriteria(QBC),它由Criteria、Criterion、Order和Restrictions等类组成。Criteria代表查询本身,Criterion表示查询条件,Order处理排序,而Restrictions则包含了一系列的比较运算符。以下是一个QBC查询的例子: ```java session = this.getSession(); Criteria cri = session.createCriteria(JdItemSerialnumber.class); Criterion cron = Restrictions.like("customer", name); cri.add(cron); List<JdItemSerialnumber> list = cri.list(); ``` 这里我们创建了一个Criteria对象,针对`JdItemSerialnumber`类,然后添加了一个条件,即`customer`字段需与`name`匹配。 Criteria API还支持多种比较运算符,如下所示: 1. `eq()`:等于,相当于HQL中的`=` 2. `not(EqExpression)`:不等于,相当于`<>` 3. `gt()`:大于,相当于`>` 4. `ge()`:大于等于,相当于`>=` 5. `lt()`:小于,相当于`<` 6. `le()`:小于等于,相当于`<=` 7. `isnull()`:等于空值 8. `isNotNull()`:非空值 9. `like()`:字符串模式匹配,例如模糊查询 10. `and()` 和 `conjunction()`:逻辑与 11. `or()` 和 `disjunction()`:逻辑或 12. `not()`:逻辑非 13. `in(列表)`:等于列表中的某一个值 14. `not(in(列表))`:不等于列表中任意一个值 15. `between(x and y)`:在指定范围之间 例如,如果我们要查询`age`字段大于18且小于30的学生,可以这样编写: ```java cri.add(Restrictions.ge("age", 18)); cri.add(Restrictions.lt("age", 30)); ``` 通过Criteria API,开发者可以根据业务需求灵活地构建复杂的查询条件,同时保持代码的简洁和清晰。理解并熟练运用Criteria API,将极大地提高你在Hibernate开发中的效率。