`

Hibernate createCriteria查询详解

阅读更多

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

Criteria crit = sess.createCriteria(Cat.class);

crit.setMaxResults(50);

List cats = crit.list();

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();

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的子类)。有一个特别有用,可以让你直接嵌入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查询详解

    hibernate查询详解 在Java开发中,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,极大地简化了数据库操作。本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询...

    Hibernate的查询方式

    ### Hibernate的查询方式详解 #### 引言 Hibernate作为Java领域中最流行的ORM(Object-Relational Mapping)框架之一,提供了一系列高效、灵活的查询机制,旨在桥接对象模型与关系数据库之间的鸿沟。本文将深入...

    通用的hibernate查询

    【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,从而避免了传统的JDBC编码方式带来的复杂性。本篇文章将...

    Hibernate查询方式代码示例

    **Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...

    整合struts+hibernate例子图文详解

    例如,在`listUsers()`方法中,可以通过Session的`createCriteria()`方法查询所有用户: ```java Session session = sessionFactory.getCurrentSession(); Criteria criteria = session.createCriteria(User....

    hibernate的多态查询

    5. **多态查询的实现**:Hibernate支持使用`DetachedCriteria`或`Criteria` API来进行多态查询,通过`createCriteria()`方法指定父类,并使用`add(Restrictions.in("property", values))`等方法来限制查询条件。...

    hibernateCriteria查询

    ### Hibernate Criteria 查询详解 #### 一、概述 Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向...

    Hibernate查询解决方案

    ### Hibernate查询解决方案详解 #### 一、概述 Hibernate 是一个开放源代码的 ORM(对象关系映射)框架,它提供了从 Java 类到数据库表的映射机制,以及数据的查询和获取方式。Hibernate 的核心功能之一是提供了...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    ### Hibernate 查询方式与批处理及连接池配置详解 #### 一、Hibernate 查询方式介绍 Hibernate 是一款优秀的 ORM(对象关系映射)框架,它能够极大地简化数据库操作,并提供多种查询方式来满足不同的业务需求。 #...

    hibernate的详解、原理以及api

    5. **Query**: 使用`Session.createQuery()`或`Session.createCriteria()`创建查询对象,执行HQL或Criteria查询。 6. **Criteria API**: 提供一种面向对象的查询方式,无需记住SQL语法。 ### WebLogic上的配置 在...

    spring+hibernate详解

    ### Spring与Hibernate集成详解 #### 一、Spring与Hibernate集成概述 在现代Java企业级应用开发中,Spring框架因其强大的依赖注入(DI)和面向切面编程(AOP)功能而备受青睐,它能帮助开发者简化Java应用的开发...

    \Hibernate_query条件查询

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

    Hibernate中Criteria的用法详解

    在Java的持久化框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来构建动态和复杂的查询。Criteria API的主要优点在于它的灵活性,允许开发者在运行时构建查询,而不必预先定义HQL(Hibernate Query ...

    Hibernate_Query查询所有数据

    《Hibernate 查询所有数据详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在使用Hibernate进行数据查询时,获取所有数据是最基础的操作之一。本文将深入探讨如何...

    Hibernate中Example的用法

    ### Hibernate中Example的用法详解 #### 一、前言 Hibernate作为一款强大的ORM(对象关系映射)框架,提供了多种灵活的查询方式,其中`Example`查询是基于对象实例进行匹配查询的一种方法,它允许开发者通过提供一...

    hibernate的配置使用和各种查询

    ### Hibernate的配置与使用详解 #### 一、Hibernate概述 Hibernate是一种开源的对象关系映射(Object-Relational Mapping,简称ORM)框架,它为Java应用提供了利用SQL数据的持久化解决方案。通过ORM技术,开发人员...

    用Hibernate实现分页查询.docx

    ### 使用Hibernate实现分页查询 #### 一、分页查询概念及原理 分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同...

    Hibernate 1+N问题详解

    ### Hibernate 1+N问题详解 #### 一、Hibernate 1+N问题概述 在关系型数据库设计中,我们经常遇到“一对多”(1:N)这样的关系。而在对象关系映射(Object-Relational Mapping,简称ORM)框架如Hibernate中,这种...

    Hibernate的一些基础的查询资料,备份

    **Hibernate基础查询详解** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者以面向对象的方式处理数据,而无需直接编写SQL语句。本资料将深入探讨Hibernate的基础查询...

Global site tag (gtag.js) - Google Analytics