`
zgqynx
  • 浏览: 1370941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate条件查询(Criteria Query)

阅读更多
Hibernate条件查询(Criteria Query) - -

                                     

1、创建一个Criteria实例
net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询。Session是用来制造Criteria实例的工厂。

Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();

返回最多50条记录的结果集。

2、缩小结果集范围
一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口的一个实例。类net.sf.hibernate.expression.Expression定义了获得一些内置的Criterion类型。

List cats = sess.createCriteria(Cat.class)
    .add( Expression.like("name", "Fritz%") )
    .add( Expression.between("weight", minWeight, maxWeight) )
    .list();
表达式(Expressions)可以按照逻辑分组.

List cats = sess.createCriteria(Cat.class)
    .add( Expression.like("name", "Fritz%") )
    .add( Expression.or(
     Expression.eq( "age", new Integer(0) ),
     Expression.isNull("age")
    ) )
    .list();

返回(name like "Fritz%" and age 等于0 或者 age 为空)的结果集


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

Expression.disjunction()----意思是可以按照逻辑分组
有很多预制的条件类型(Expression的子类)。有一个特别有用,可以让你直接嵌入SQL。

List cats = sess.createCriteria(Cat.class)
    .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )
    .list();
其中的{alias}是一个占位符,它将会被所查询实体的行别名所替代。(原文:The {alias} placeholder with be replaced by the row alias of the queried entity.)

3、对结果排序
可以使用net.sf.hibernate.expression.Order对结果集排序.

List cats = sess.createCriteria(Cat.class)
    .add( Expression.like("name", "F%")
    .addOrder( Order.asc("name") )
    .addOrder( Order.desc("age") )
    .setMaxResults(50)
    .list();
4、关联(Associations)
你可以在关联之间使用createCriteria(),很容易地在存在关系的实体之间指定约束。

List cats = sess.createCriteria(Cat.class)
    .add( Expression.like("name", "F%")
    .createCriteria("kittens")
        .add( Expression.like("name", "F%")
    .list();
注意,第二个createCriteria()返回一个Criteria的新实例,指向kittens集合类的元素。

下面的替代形式在特定情况下有用。

List cats = sess.createCriteria(Cat.class)
    .createAlias("kittens", "kt")
    .createAlias("mate", "mt")
    .add( Expression.eqProperty("kt.name", "mt.name") )
    .list();
(createAlias())并不会创建一个Criteria的新实例。)

请注意,前面两个查询中Cat实例所持有的kittens集合类并没有通过criteria预先过滤!如果你希望只返回满足条件的kittens,你必须使用returnMaps()。

List cats = sess.createCriteria(Cat.class)
    .createCriteria("kittens", "kt")
        .add( Expression.eq("name", "F%") )
    .returnMaps()
    .list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
    Map map = (Map) iter.next();
    Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
    Cat kitten = (Cat) map.get("kt");
}
5、动态关联对象获取(Dynamic association fetching)
可以在运行时通过setFetchMode()来改变关联对象自动获取的策略。

List cats = sess.createCriteria(Cat.class)
    .add( Expression.like("name", "Fritz%") )
    .setFetchMode("mate", FetchMode.EAGER)
    .list();
这个查询会通过外连接(outer join)同时获得 mate和kittens。

6、根据示例查询(Example queries)
net.sf.hibernate.expression.Example类允许你从指定的实例创造查询条件。

Cat cat = new Cat();
cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)
    .add( Example.create(cat) )
    .list();
版本属性,表示符属性和关联都会被忽略。默认情况下,null值的属性也被排除在外。

You can adjust how the Example is applied. 你可以调整示例(Example)如何应用。

Example example = Example.create(cat)
    .excludeZeroes()           //exclude zero valued properties
    .excludeProperty("color")  //exclude the property named "color"
    .ignoreCase()              //perform case insensitive string comparisons
    .enableLike();             //use like for string comparisons
List results = session.createCriteria(Cat.class)
    .add(example)
    .list();
你甚至可以用示例对关联对象建立criteria。

List results = session.createCriteria(Cat.class)
    .add( Example.create(cat) )
    .createCriteria("mate")
        .add( Example.create( cat.getMate() ) )
    .list();
分享到:
评论

相关推荐

    Hibernate中Criteria的完整用法

    Hibernate中的Criteria API是一种用于执行动态查询的机制,它允许开发者在运行时...在实际项目中,可以根据需求选择使用HQL(Hibernate Query Language)或Criteria API,两者各有优势,选择取决于具体场景和团队偏好。

    \Hibernate_query条件查询

    《Hibernate查询条件查询详解》 Hibernate作为Java领域中广受欢迎的对象关系映射(ORM)框架,极大地简化了数据库操作。其强大的查询能力是其核心功能之一。本篇将深入探讨Hibernate的条件查询,帮助开发者更好地...

    Hibernate_Criteria条件查询数据

    Criteria查询是Hibernate提供的API,与传统的HQL(Hibernate Query Language)查询相比,它更具有动态性和灵活性。Criteria查询允许你在运行时构建查询,这在处理动态或复杂的查询需求时尤其有用。下面我们将深入...

    Hibernate-Criteria_模糊查询

    Hibernate的Criteria API是一种灵活、强大的查询方式,它允许开发者构建复杂的查询条件,而不必直接编写SQL语句。Criteria API基于面向对象的方式进行查询构建,可以动态地添加各种查询条件,包括等值比较、范围查询...

    Hibernate的Criteria用法总结

    在Java持久层框架...然而,对于非常复杂的查询,HQL(Hibernate Query Language)可能会更适合,因为它更接近SQL,能更好地表达复杂的查询逻辑。理解并熟练运用Criteria API,能有效提升在Hibernate中的查询效率。

    Hibernate中Criteria的完整用法.docx

    Hibernate 中 Criteria 的完整用法是 Hibernate 框架中的一种查询机制,允许开发者灵活地根据查询条件来组装查询语句。在使用 Spring 和 Hibernate 进行开发时,Criteria 的优势尤为明显。本文将对 Hibernate 中 ...

    Hibernate_Query查询所有数据

    CriteriaQuery<YourEntityName> criteriaQuery = builder.createQuery(YourEntityName.class); Root<YourEntityName> root = criteriaQuery.from(YourEntityName.class); TypedQuery<YourEntityName> typedQuery ...

    Hibernate中的Criteria的认识

    Criteria API基于CriteriaQuery接口,提供了丰富的查询选项,包括排序、分页、聚合函数等,这使得开发者能够更加灵活地进行数据检索。 ### 使用Criteria进行基本查询 在给定的部分内容中,首先展示的是如何使用...

    hibernate criteria 分组 排序 关联

    在Hibernate中,使用`Criteria`进行查询时,可以通过添加排序条件来对结果集进行排序。`Criteria`提供了一个非常灵活的方式来实现这一点。 **示例代码**: ```java Criteria criteria = session.createCriteria...

    Hibernate-Criteria 模糊查询

    Hibernate作为一款优秀的Java持久层框架,提供了多种方式来进行数据库操作,其中包括HQL(Hibernate Query Language)、Criteria API以及Native SQL等。其中,Criteria API由于其简洁的API设计和强大的查询能力,受...

    Hibernate_query查询数据表中的一个字段.

    Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...

    Hibernate中Criteria的用法

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

    Hibernate_query聚合函数查询.

    在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,Hibernate提供的聚合函数使得在Java应用程序中进行数据...

    Hibernate Criteria 排序的問題

    - **Criteria API**:是Hibernate提供的一种灵活且强大的查询方式,允许开发者通过程序化的方式来构建查询条件。 - **Order**:用于表示排序规则的对象,包含升序(asc)和降序(desc)两种类型。 - **Criteria....

    Hibernate的Criteria文档

    在Java的持久层框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来替代传统的SQL或HQL(Hibernate Query Language)查询,以实现更加面向对象的数据库交互。Criteria API的设计旨在屏蔽不同数据库之间...

    Hibernate中的查询:HQL、Criteria、原生SQl

    本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...

    Hibernate的查询方式

    本文将深入探讨Hibernate的查询方式,特别聚焦于HQL(Hibernate Query Language)查询方式以及QBC(Query By Criteria)查询方式,旨在帮助读者全面理解并掌握这些核心功能。 #### HQL查询方式:面向对象的查询语言...

    Hibernate在查询条件中创建List集合

    总结,使用Hibernate在查询条件中创建List集合是Java开发中常见的操作,无论是通过HQL还是Criteria API,都能灵活、高效地处理复杂的查询需求。在实际开发中,我们应该根据项目需求和团队习惯选择合适的查询方式,并...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    总的来说,Hibernate的`Criteria`、`Query`以及QBC(Query By Criteria)提供了灵活且强大的查询手段,它们不仅支持基本的单表查询,还能处理复杂的联表、分页、参数绑定和统计需求,是Java开发者进行数据库操作的...

    关联映射hibernate的criteria的用法

    与HQL(Hibernate Query Language)相比,Criteria API更易于理解和使用,尤其在处理复杂的查询条件时。它通过对象来表示查询条件,使得代码更具有可读性和可维护性。 ### 2. 创建Criteria查询 首先,我们需要从`...

Global site tag (gtag.js) - Google Analytics