Hibernate Criteria查询详解:QBE与QBC的使用

需积分: 9 0 下载量 127 浏览量 更新于2024-07-22 收藏 69KB DOC 举报
"这篇文档详细介绍了Hibernate框架中Criteria API的使用方法,包括QueryByExample(QBE)和QueryByCriteria(QBC)的概念及其在实际操作中的应用。通过示例展示了如何利用Criteria API进行条件查询、比较运算符的使用以及逻辑操作的实现。" 在Hibernate中,Criteria API提供了一种动态构建SQL查询的方式,它允许开发者在运行时根据业务需求构造查询条件,而无需手动编写SQL语句。Criteria API具有高度封装和灵活性,是Hibernate框架的重要组成部分。 1. QueryByExample(QBE) QBE是一种基于实例的查询方式,它允许我们创建一个对象作为查询模板,然后将这个对象的属性作为查询条件。例如: ```java Criteriacri = session.createCriteria(Student.class); cri.add(Example.create(s)); // s 是一个 Student 对象 List<Student> list = cri.list(); ``` 在这个例子中,`s`对象的属性将被用来匹配数据库中的记录,所有与`s`属性匹配的`Student`对象都将被查询出来。 2. QueryByCriteria(QBC) QBC是基于Criteria、Criterion、Order和Restrictions等类构建查询的API。下面是一个基本的QBC查询示例: ```java Criteriacri = session.createCriteria(JdItemSerialnumber.class); Criterion cron = Restrictions.like("customer", name); cri.add(cron); List<JdItemSerialnumber> list = cri.list(); ``` 这里,`createCriteria`用于创建一个针对`JdItemSerialnumber`类的Criteria对象,`Restrictions.like`用于添加一个“like”条件,最后通过`add`方法将条件添加到Criteria中,并执行查询。 3. 比较运算符 Criteria API提供了丰富的比较运算符,与HQL的运算符对应: - `Restrictions.eq()`:等于 - `Restrictions.not(Expressions.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(list)`:等于列表中的某一个值 - `Restrictions.not(Restrictions.in(list))`:不等于列表中任意一个值 - `Restrictions.between(x, y)`:在两个值之间 4. 逻辑操作 Criteria API支持使用`and`、`or`和`not`方法组合多个条件,构建复杂的逻辑表达式。例如,可以这样实现“年龄大于18且名字以'John'开头”的查询: ```java cri.add(Restrictions.ge("age", 18)); cri.add(Restrictions.like("name", "John%")); ``` Hibernate的Criteria API提供了一种强大的、类型安全的方式来执行对象持久化查询,使得开发者能够更加灵活地处理各种查询需求,同时避免了直接操作SQL可能导致的潜在问题。在实际项目中,熟练掌握Criteria API能够极大地提高开发效率和代码的可维护性。