Criteria与DetachedCriteria

Criteria和DetachedCriteria是hibernate的两个查询方法(方便查询条件的组装)。

hibernate设计了CriteriaSpecification作为Criteria的父接口,提供Criteria和DetachedCriteria。

Criteria和DetachedCriteria主要区别是创建形式不同:

1.Criteria是在线的,是由Hibernate Session进行创建;

2.DetachedCriteria是离线的,创建无需session,而是由DetachedCriteria提供了2个静态方法

forClass(Class)或者forEntityName(Name)进行DetachedCriteria实例的创建。

Spring框架提供了getHibernateTemplate().findByCriteria(detachedCriteria)方法可以根据DetachedCriteria来

返回查询结果。

Criteria和DetachedCriteria均可使用Criteria和Projection设置查询条件。

可以设置FetchMode(联合查询抓取的模式),设置排序方式。

对于Criteria还可以设置FlushModel(冲刷Session的方式)和LockMode(数据库锁模式)。

Criterion是Criteria的查询条件。

Criteria提供了add(Criterion criterion)方法来添加查询条件。

Criterion接口主要实现:Example、Junction和SimpleExpression。

Junction的实际使用是它的两个子类conjunction和disjunction,分别使用AND和OR操作符进行联结查询条件集合。

Criterion的实例可以通过Restrictions工具类来创建,Restrictions提供了大量的静态方法,如eq(=)、ge(>=)、

between等方法来创建Criterion查询条件(SimpleException实例)。Restrictions还提供了方法来创建conjunction和

disjunction实例,通过往该实例的add(Criteria)方法来增加查询条件形成一个查询条件集合。

Example本身提供了一个静态方法create(Object entity),即根据一个对象(实际使用中一般是映射到数据库的对象)

来创建。

过滤条件:

Example exampleUser=Example.create(u).ignoreCase().enableLike(MatchMode.ANYWHERE);

//忽略大小写;对于String类型的属性,无论值在哪里都匹配。相当于%value%

Project主要是让Criteria能够进行报表查询,并实现分组。Project主要有SimpleProjection、ProjectionList和Property

三个实现。其中SimpleProject和ProjectionList的实例化是由内建的Projections来完成,如提供avg、count、max、

min、sum可以对某个字段进行统计查询。

Property是对某个字段进行查询条件的设置,如,通过Property.forName("color").in(new String[]{"black","red","write"});创建

一个Project实例。通过criteria的add(Project)方法加入到查询条件中去。

使用criteria进行查询,hibernate提供了那些类和方法来满足开发中查询条件的创建和组装。

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%") )




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值