Hibernate Criteria查询详解:在线与离线, Criterion与Projection

需积分: 9 2 下载量 132 浏览量 更新于2024-09-26 收藏 52KB DOC 举报
"Hibernate中Criteria的用法详解" 在Java的持久化框架Hibernate中,Criteria API是一种灵活且强大的查询机制,用于构建动态的SQL查询。它允许开发者在运行时构造查询,而不必预先知道所有可能的查询条件。Criteria API提供了一种面向对象的方式来表示SQL查询,使得代码更加可读和易于维护。 Criteria接口是Criteria API的核心,它允许我们构建一个查询对象,然后添加各种查询条件。例如,我们可以使用`add(Criterion criterion)`方法来添加一个或多个条件。Criterion接口代表单个查询条件,可以通过Restrictions类提供的静态方法来创建,这些方法包括`eq()`(等于)、`ge()`(大于等于)、`le()`(小于等于)、`like()`(模糊匹配)等,以符合不同查询需求。 Junction接口,尤其是它的子类Conjunction(AND操作)和Disjunction(OR操作),用于组合多个Criterion对象,形成更复杂的逻辑表达式。例如,我们可以使用`and()`和`or()`方法将多个条件以AND或OR的方式连接起来。 DetachedCriteria是Criteria的一个变体,主要适用于离线查询场景,它可以在没有Session的情况下创建,然后在需要的时候与Session关联并执行查询。这在一些复杂的应用场景中非常有用,比如在服务层预编译查询条件,然后在需要的时候执行。 Projection接口则用来定义查询结果的投影,即我们希望从数据库中获取哪些字段。它可以是属性的值、计算的表达式或者聚合函数。例如,我们可以使用Projections类的`property()`方法来获取单一属性,或者`count()`方法来计算记录数量。 除此之外,Criteria API还支持设置查询的其他高级特性,如FetchMode(决定关联关系的加载方式,如EAGER或LAZY),FlushMode(控制何时将缓存中的更改同步到数据库),以及LockMode(控制数据库锁定策略,如NONE、READ或WRITE)。 Hibernate的Criteria API提供了一种强大而灵活的查询语言,使得开发者能够轻松处理动态查询和复杂的数据过滤。通过组合Criterion、Junction、Projection和其它设置,开发者可以构建出满足各种需求的数据库查询,同时保持代码的清晰和模块化。在实际开发中,特别是在Spring框架中,结合HibernateTemplate,Criteria API能够帮助我们编写出更加简洁和高效的业务逻辑。