Hibernate Criteria详解:查询方式与条件操作符

需积分: 9 1 下载量 126 浏览量 更新于2024-07-27 收藏 69KB DOC 举报
在Java编程中,Hibernate是一个广泛使用的持久化框架,它提供了多种方法来操作数据库。其中,Criteria是Hibernate提供的一种强大且灵活的查询构建器,用于构建复杂的SQL查询。Criteria用法分为两种主要方式:QueryByExample (QBE) 和 QueryByCriteria (QBC)。 1. QueryByExample (QBE) QueryByExample 是通过Example对象来执行查询的方式,它适用于需要根据对象的属性动态匹配数据库记录的情况。例如,假设我们有一个名为`Student`的实体类,你想查找所有`giftortoy`字段值为"2"的学生: ```java Criteriacri = session.createCriteria(Student.class); Example.create(s).add(Restrictions.eq("giftortoy", "2")); // s是一个Student对象实例 List<Student> listcri = cri.list(); ``` 在这个例子中,`Example.create(s)` 创建了一个查询模板,然后使用`Restrictions.eq()`方法指定`giftortoy`字段应等于"2"。 2. QueryByCriteria (QBC) QueryByCriteria 则更加强调使用Criterion、Criterion子类(如Restrictions)、Order和Criteria对象来构建查询。例如,如果你需要查询`JdItemSerialnumber`表中`customer`字段包含特定名称的所有记录: ```java Criteriacri = session.createCriteria(JdItemSerialnumber.class); Criterion cron = Restrictions.like("customer", name); // name是你想要匹配的名称 cri.add(cron); List<JdItemSerialnumber> list = cri.list(); ``` 这里使用了`Restrictions.like()`方法来执行字符串模式匹配,`name`将被替换为实际的匹配条件。 比较运算符 Hibernate Criteria支持多种比较运算符,包括但不限于: - `Restrictions.eq()`: 等于 - `Restrictions.not(Exprission.eq())`: 不等于 - `Restrictions.gt()`: 大于 - `Restrictions.ge()`: 大于等于 - `Restrictions.lt()`: 小于 - `Restrictions.le()`: 小于等于 - `Restrictions.isnull()`: 字段值为NULL - `Restrictions.isNotNull()`: 字段值不为NULL - `Restrictions.like()`: 字符串模式匹配 - `Restrictions.and()`: 逻辑与 - `Restrictions.conjunction()`: 逻辑与的工厂方法 - `Restrictions.or()`: 逻辑或 - `Restrictions.disjunction()`: 逻辑或的工厂方法 - `Restrictions.not()`: 逻辑非 - `Restrictions.in()`: 检查字段值是否在指定列表中 - `Restrictions.not(Restrictions.in())`: 检查字段值不在指定列表中 - `Restrictions.between()`: 检查字段值是否在一个范围之内 这些运算符可以帮助开发者构建复杂的查询条件,满足各种业务需求。Criteria用法提供了高级查询能力,使得代码更加灵活和可维护,但同时也需要对查询语句的构造有深入理解。