详析Hibernate Criteria查询:完整用法与示例

需积分: 10 2 下载量 150 浏览量 更新于2024-11-23 收藏 11KB TXT 举报
"这篇文章主要介绍了Hibernate中的Criteria查询机制,包括Criteria、DetachedCriteria的使用,以及相关的Criterion、Projection和FetchMode等概念。" 在Hibernate框架中,Criteria API提供了一种面向对象的方式来执行数据库查询,无需编写SQL语句。Criteria API允许开发者通过构建对象来表达查询条件,使得代码更易于维护和理解。 首先,Criteria API的核心是`Criteria`接口,它是用来创建动态查询的基础。通过`Session.createCriteria()`方法,我们可以创建一个Criteria实例,然后向其添加各种查询条件和限制,最后调用`list()`或`uniqueResult()`来执行查询。 `DetachedCriteria`是一个特殊的Criteria,它可以在不与数据库交互的情况下创建,主要用于延迟加载或在非当前Session中构建查询。通过`DetachedCriteria.forClass()`或`DetachedCriteria.forEntityName()`可以创建一个与实体类或实体名称关联的DetachedCriteria实例。然后,我们可以通过`detachedCriteria.getExecutableCriteria(session)`将DetachedCriteria转换为可执行的Criteria,并在Session中执行。 在Criteria查询中,`Criterion`接口用于表示单个查询条件,如`Restrictions.eq("propertyName", value)`用于创建等于条件,`Restrictions.ge("propertyName", value)`用于创建大于等于条件,`Restrictions.between("propertyName", value1, value2)`用于创建范围条件等。`SimpleExpression`是Criterion的一个实现,用于构建简单的比较操作。 `Projection`接口则用于定义查询结果的返回类型,例如,我们可以使用`Projections.count("propertyName")`获取某个属性的数量,或者`Projections.property("propertyName")`获取指定属性的值。 FetchMode用于控制关联对象的加载策略,例如,`FetchMode.JOIN`会使用JOIN来加载关联对象,而`FetchMode.SELECT`则会在需要时单独查询。 `Junction`接口用于组合多个Criterion,形成复杂的逻辑表达式,如`Conjunction`(AND)和`Disjunction`(OR)。通过`Restrictions.conjunction()`和`Restrictions.disjunction()`可以创建这些逻辑连接。 `Example`类提供了一种基于对象实例创建查询的方式,通过`Example.create(entity)`创建Example实例,然后可以设置忽略大小写(`ignoreCase()`)或匹配模式(`enableLike(MatchMode.ANYWHERE)`),来定制查询行为。 Hibernate的Criteria API提供了一套灵活且强大的查询工具,开发者可以根据需求自由组合条件,实现各种复杂的数据库查询操作,同时保持代码的清晰性和可读性。在实际开发中,掌握Criteria API的用法对于提高代码质量有着重要的意义。