`

Criterion和Criteria

阅读更多

              Hibernate Criterion是Criteria的查询条件。Criteria 提供了add(Criterion criterion)方法来添加查询条件。Criteria 的特点来方便地进行查询条件的组装。

 

              Criteria的常用方法:

 

              1. 创建一个Criteria 实例
            org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。
           Criteria crit = sess.createCriteria(Cat.class);
           crit.setMaxResults(50);
           List cats = crit.list();


             2. 限制结果集内容
           一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。
           org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
           List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.between("weight", minWeight, maxWeight) ).list();


           约束也可以按逻辑分组。 

           List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
           Restrictions.eq( "age", new Integer(0) ),
           Restrictions.isNull("age")
 ) ).list();
 
           List cats = sess.createCriteria(Cat.class).add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ).add( Restrictions.disjunction()
          .add( Restrictions.isNull("age") )
          .add( Restrictions.eq("age", new Integer(0) ) )
          .add( Restrictions.eq("age", new Integer(1) ) )
          .add( Restrictions.eq("age", new Integer(2) ) )
 ) ).list();

 

           3. 结果集排序
          使用org.hibernate.criterion.Order来为查询结果排序。 
           List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "F%")
.addOrder( Order.asc("name") ).addOrder( Order.desc("age") ).setMaxResults(50)
.list();
 
           List cats = sess.createCriteria(Cat.class).add( Property.forName("name").like("F%") ).addOrder( Property.forName("name").asc() ).addOrder( Property.forName("age").desc() ).setMaxResults(50).list();

 

           4. 关联
          使用createCriteria()很容易的在互相关联的实体间建立约束。
           List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "F%")
.createCriteria("kittens").add( Restrictions.like("name", "F%").list();

           5. 查询示例
           org.hibernate.criterion.Example类允许通过一个给定实例来构建一个条件查询。     

           Cat cat = new Cat();
           cat.setSex('F');
           cat.setColor(Color.BLACK);
           List results = session.createCriteria(Cat.class).add( Example.create(cat) ) .list();

           6. 投影(Projections)、聚合(aggregation)和分组(grouping)
           org.hibernate.criterion.Projections是 Projection 的实例工厂。一般通过调用 
setProjection()应用投影到一个查询。 
           List results = session.createCriteria(Cat.class).setProjection( Projections.rowCount() ).add( Restrictions.eq("color", Color.BLACK) ).list();
           List results = session.createCriteria(Cat.class).setProjection( Projections.projectionList()
          .add( Projections.rowCount() )
          .add( Projections.avg("weight") )
          .add( Projections.max("weight") )
          .add( Projections.groupProperty("color") )).list();

   在一个条件查询中没有必要显式的使用 "group by" 。某些投影类型就是被定义为分组投影,而这些投影类型也出现在SQL的group by子句中。 可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。 

          下面是两种不同的实现方式:

           List results = session.createCriteria(Cat.class).setProjection(

Projections.alias( Projections.groupProperty("color"), "colr" ) ).addOrder( Order.asc("colr") ).list();

 

           List results = session.createCriteria(Cat.class).setProjection(

Projections.groupProperty("color").as("colr") ).addOrder( Order.asc("colr") ).list();

               
           alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,当你添加一个投影到一个投影列表中时你可以为它指定一个别名:

 

           List results = session.createCriteria(Cat.class)
          .setProjection( Projections.projectionList()
          .add( Projections.rowCount(), "catCountByColor" )
          .add( Projections.avg("weight"), "avgWeight" )
          .add( Projections.max("weight"), "maxWeight" )
          .add( Projections.groupProperty("color"), "color" )
    )
         .addOrder( Order.desc("catCountByColor") )
         .addOrder( Order.desc("avgWeight") )
.list();
        

          List results = session.createCriteria(Domestic.class, "cat")
          .createAlias("kittens", "kit")
          .setProjection( Projections.projectionList()
          .add( Projections.property("cat.name"), "catName" )
          .add( Projections.property("kit.name"), "kitName" )
    )
          .addOrder( Order.asc("catName") )
          .addOrder( Order.asc("kitName") )
.list();

         

分享到:
评论

相关推荐

    Hibernate中Criteria的完整用法.docx

    本文将对 Hibernate 中 Criteria 的用法进行总结,涵盖 Criteria 和 DetachedCriteria 的差异、Criterion 和 Projection 的使用方法等。 Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供...

    Hibernate中Criteria的使用

    Criteria 和 DetachedCriteria 都可以使用Criterion 和 Projection 设置查询条件,可以设置 FetchMode(联合查询抓取的模式)、设置排序方式,对于 Criteria 还可以设置 FlushMode(冲刷 Session 的方式)和 ...

    Hibernate的Criteria用法总结.doc

    Criterion 是 Criteria 的查询条件,可以通过 add(Criterion criterion) 方法添加查询条件。Criterion 接口的主要实现包括 Example、Junction 和 SimpleProjection。Junction 的实际使用是它的两个子类 conjunction ...

    Hibernate中Criteria的完整用法

    Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode(联合查询抓取的模式),设置排序方式。对于 Criteria 还可以设置 FlushModel(冲刷 Session 的方式)和 ...

    Criteria的完整用法.pdf

    通过理解并熟练掌握`Criteria`、`DetachedCriteria`、`Criterion`和`Projection`等核心概念及其使用方法,可以显著提升数据库操作的效率和代码的可维护性。在实际项目中,结合Spring框架的便利性,开发者能够更加...

    Hibernate的Criteria用法总结

    Criteria和DetachedCriteria都可以利用Criterion和Projection来设置查询条件和结果处理。Criterion定义了查询的基本单元,例如单个条件,例如相等、大于、范围等。Junction接口(包括conjunction和disjunction)用于...

    criteria介绍与使用

    ### Criteria介绍与使用 在Java开发中,特别是涉及到数据库操作时,经常需要用到...通过本文的介绍,相信读者已经掌握了`Criteria`的基本用法和高级特性,可以在实际项目中灵活运用这些技术来提高开发效率和代码质量。

    Hibernate的Criteria文档

    `Criteria`接口提供了添加查询条件(`add(Criterion)`)、设置排序(`setOrder(Order)`)以及设置查询范围(`setFirstResult(int)`和`setMaxResults(int)`)等方法。 DetachedCriteria是Criteria的一个扩展,它允许...

    criterion简介

    在实际应用中,Criterion 可以用来实现各种复杂的查询操作,例如查询学生名字以 t 开头的所有 Student 对象,或者查询学生姓名在 Bill, Jack 和 Tom 之间的所有 Student 对象。Criterion 的灵活性和可重用性使得它在...

    Criteria.pdf

    - **Criterion**:这是`Criteria`查询中的条件对象,通过`Criteria.add(Criterion criterion)`方法添加到`Criteria`实例中。`Criterion`接口有多种实现,包括`Example`、`Junction`和`SimpleExpression`。其中,`...

    hibernateCriteria查询

    与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria查询是除HQL之外的另一种常用查询方式。 #### 二、Criteria 接口 `org.hibernate.Criteria` 接口代表了针对某个特定...

    Hibernate criteria基本操作

    Hibernate Criteria 支持多种比较操作,例如 `eq`(等于)、`ne`(不等于)、`gt`(大于)、`lt`(小于)、`ge`(大于等于)和 `le`(小于等于)。例如: ```java criteria.add(Restrictions.eq("name", "刘伟"))...

    Hibernate中Criteria的用法

    Criteria 查询机制主要包括 QBE(Query By Example)、QBC(Query By Criteria)和 HQL(Hibernate Query Language)三种方式。 QBE(Query By Example) QBE 是一种基于示例的查询机制,它可以根据一个示例对象来...

    Hibernate Criteria用法大全.docx

    通过Criteria API,开发者可以构建复杂的查询条件,无需直接编写SQL,使得代码更加易于理解和维护。 1. **标准查询简介(QBC:Query By Criteria)** Criteria API 的核心在于`Criteria`对象,它是通过`Session`的...

    Criteria详解

    `Criterion`是Criteria API中的一个核心概念,用于定义查询条件。通过使用`Criterion`,我们可以更加灵活地组合不同的查询条件,从而构建出复杂的查询逻辑。 1. **简单条件:** 可以通过`Restrictions`类来快速创建...

    Criteria使用方法

    Hibernate作为Java领域中最流行的ORM(Object Relational Mapping)框架之一,提供了多种查询数据的方式,其中Criteria API因其强大的功能和灵活性而备受开发者青睐。 本文将详细介绍Hibernate中Criteria接口的常见...

    hibernate criteria的使用方法

    ### Hibernate Criteria 使用方法详解 #### 一、简介 Hibernate 是一款非常流行的 Java 持久层框架,它简化了对象关系映射(ORM)过程中的许多...希望本文能够帮助开发者更好地理解和使用 Hibernate Criteria API。

Global site tag (gtag.js) - Google Analytics