Criteria.doc
Criteria API 是 Hibernate 框架提供的一种用于动态构建 SQL 查询的高级接口。它允许开发者以面向对象的方式定义查询条件,避免直接编写 SQL 语句,从而减少对数据库特定语法的依赖,提高代码的可移植性。在 Hibernate 中,Criteria API 提供了一种灵活且类型安全的方式来执行数据库查询。 创建 Criteria 对象是通过 Session 接口的 createCriteria() 方法实现的,例如 `Criteria criteria = session.createCriteria(User.class);` 这行代码创建了一个针对 User 类的 Criteria 查询,这将对应于 User 表的所有记录。执行 `criteria.list()` 将返回一个包含 User 实例的 List,这些实例是根据 Criteria 查询从数据库中获取的。 Criteria API 提供了多种方法来添加查询条件。`Restrictions` 类是 Criteria API 的核心,它提供了多种静态方法用于创建不同类型的查询条件。例如,`gt(String propertyName, Object value)` 用于创建大于条件,`lt(String propertyName, Object value)` 创建小于条件,`eq(String propertyName, Object value)` 创建等于条件,而 `isNull(String propertyName)` 创建为空条件。 在添加条件时,`add()` 方法用于将条件加入到 Criteria 对象中。默认情况下,多个 `add()` 调用之间使用 `and` 连接,如: ```java criteria.add(Restrictions.gt("age", new Integer(20))); criteria.add(Restrictions.lt("age", new Integer(40))); ``` 这将生成 SQL 语句中的 `WHERE age > ? AND age < ?` 部分。 如果需要使用 `or` 连接条件,可以使用 `Restrictions.or()` 方法,如下所示: ```java criteria.add(Restrictions.or( Restrictions.eq("age", new Integer(20)), Restrictions.isNull("age") )); ``` 这会生成 SQL 语句中的 `WHERE age = ? OR age IS NULL` 部分。 Criteria API 还支持其他高级功能,例如排序(`setOrder()`),分组(`setGroupBy()`),限制结果集大小(`setFirstResult()` 和 `setMaxResults()`),以及关联查询(`createCriteria()` 用于关联实体)。通过组合这些方法,开发者可以构建复杂的查询,包括连接(joins)、子查询和嵌套查询。 Criteria API 是 Hibernate 中一个强大且灵活的工具,它允许开发者以更面向对象的方式处理数据库查询,提高了代码的可读性和可维护性,同时减少了与特定数据库方言的耦合。在实际开发中,特别是在需要动态构建查询或对数据库操作进行抽象的情况下,Criteria API 显示出了其优越性。