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 的用法进行总结,涵盖 Criteria 和 DetachedCriteria 的差异、Criterion 和 Projection 的使用方法等。 Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供...
Criteria 和 DetachedCriteria 都可以使用Criterion 和 Projection 设置查询条件,可以设置 FetchMode(联合查询抓取的模式)、设置排序方式,对于 Criteria 还可以设置 FlushMode(冲刷 Session 的方式)和 ...
Criterion 是 Criteria 的查询条件,可以通过 add(Criterion criterion) 方法添加查询条件。Criterion 接口的主要实现包括 Example、Junction 和 SimpleProjection。Junction 的实际使用是它的两个子类 conjunction ...
Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode(联合查询抓取的模式),设置排序方式。对于 Criteria 还可以设置 FlushModel(冲刷 Session 的方式)和 ...
通过理解并熟练掌握`Criteria`、`DetachedCriteria`、`Criterion`和`Projection`等核心概念及其使用方法,可以显著提升数据库操作的效率和代码的可维护性。在实际项目中,结合Spring框架的便利性,开发者能够更加...
Criteria和DetachedCriteria都可以利用Criterion和Projection来设置查询条件和结果处理。Criterion定义了查询的基本单元,例如单个条件,例如相等、大于、范围等。Junction接口(包括conjunction和disjunction)用于...
### Criteria介绍与使用 在Java开发中,特别是涉及到数据库操作时,经常需要用到...通过本文的介绍,相信读者已经掌握了`Criteria`的基本用法和高级特性,可以在实际项目中灵活运用这些技术来提高开发效率和代码质量。
`Criteria`接口提供了添加查询条件(`add(Criterion)`)、设置排序(`setOrder(Order)`)以及设置查询范围(`setFirstResult(int)`和`setMaxResults(int)`)等方法。 DetachedCriteria是Criteria的一个扩展,它允许...
在实际应用中,Criterion 可以用来实现各种复杂的查询操作,例如查询学生名字以 t 开头的所有 Student 对象,或者查询学生姓名在 Bill, Jack 和 Tom 之间的所有 Student 对象。Criterion 的灵活性和可重用性使得它在...
- **Criterion**:这是`Criteria`查询中的条件对象,通过`Criteria.add(Criterion criterion)`方法添加到`Criteria`实例中。`Criterion`接口有多种实现,包括`Example`、`Junction`和`SimpleExpression`。其中,`...
与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria查询是除HQL之外的另一种常用查询方式。 #### 二、Criteria 接口 `org.hibernate.Criteria` 接口代表了针对某个特定...
Hibernate Criteria 支持多种比较操作,例如 `eq`(等于)、`ne`(不等于)、`gt`(大于)、`lt`(小于)、`ge`(大于等于)和 `le`(小于等于)。例如: ```java criteria.add(Restrictions.eq("name", "刘伟"))...
Criteria 查询机制主要包括 QBE(Query By Example)、QBC(Query By Criteria)和 HQL(Hibernate Query Language)三种方式。 QBE(Query By Example) QBE 是一种基于示例的查询机制,它可以根据一个示例对象来...
通过Criteria API,开发者可以构建复杂的查询条件,无需直接编写SQL,使得代码更加易于理解和维护。 1. **标准查询简介(QBC:Query By Criteria)** Criteria API 的核心在于`Criteria`对象,它是通过`Session`的...
`Criterion`是Criteria API中的一个核心概念,用于定义查询条件。通过使用`Criterion`,我们可以更加灵活地组合不同的查询条件,从而构建出复杂的查询逻辑。 1. **简单条件:** 可以通过`Restrictions`类来快速创建...
Hibernate作为Java领域中最流行的ORM(Object Relational Mapping)框架之一,提供了多种查询数据的方式,其中Criteria API因其强大的功能和灵活性而备受开发者青睐。 本文将详细介绍Hibernate中Criteria接口的常见...
### Hibernate Criteria 使用方法详解 #### 一、简介 Hibernate 是一款非常流行的 Java 持久层框架,它简化了对象关系映射(ORM)过程中的许多...希望本文能够帮助开发者更好地理解和使用 Hibernate Criteria API。