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

Hibernate的检索方式(四) -

 
阅读更多

转自:http://aumy2008.blogbus.com/logs/14005572.html

 

四、 报表查询

1、投影查询

       select c from Customer c ……

       select c.name,c.age from Customer c ……

1)动态实例化查询结果

       select new com.CustomerRow(c.id,c.name,c.age) from Customer c ……

       注:CustomerRow类不需要是持久化类,因此不必创建它的对象-关系映射文件,它紧紧用于把select语句查询出来的关系数据包装为Java对象。

2)过滤查询结果中的重复元素

       select distinct c.name Customer c ……

 

2、使用聚集函数

       HQL查询语句中可以调用以下聚集函数

l         count():统计记录数

l         min()

l         max()

l         sum()

l         avg():求平均值

 

3、分组查询(group by…(having…)

       select c.name,count(c) from Customer c group by c.name

       list()结果:n个对象数组类型的元素,每个对象数组对应查询结果中的一条记录。如

    Iterator it = session.createQurey(           "select c.name,count(c) from Customer c group by c.name")           .list().iterator();    while (it.hasNext()) {       Object[] pair = (Object[]) it.next();       String name = (String) pair[0];       Integer count = (Integer) pair[1];

    }

 

4、优化报表查询的性能

       报表查询的特点:通常会处理大量数据;一般只涉及对数据的读操作,而不会修改数据。

       select语句仅仅选择查询持久化类的部分属性时,Hibernate返回的查询结果为关系数据(不会占用Session的缓存),而不是持久化对象(位于Session缓存中)。

 

       如果采用select语句查询,能提高报表查询的性能,只要应用程序不在引用这些数据,它们占用的内存就会被释放。当采用from类型的HQL语句查询出持久化对象,会导致大量的持久化对象一直位于Session的缓存中,而且Session还比讯负责这些对象与数据库的同步。

 

       对于select语句查询,可以定义一个JavaBean来包装查询结果中的关系数据,使应用程序仍旧能够面向对象的方式来访问查询结果。

  

五、高级查询技巧

1、动态查询

       HQLQBC都能完成许多相同的任务,相比之下,HQL能够直观地表达复杂的查询语句,而QBC表达复杂的查询语句很麻烦。

       如果在程序运行前就明确了查询语句的内容(也称静态查询),应该优先考虑HQL查询方式。但是,如果只有在程序运行时才能明确查询语句的内容(也称动态查询),QBCHQL更加的方便。

 

QBE的模糊匹配示例:

    Customer customer=....    Example exampleCustomer=Example.create(customer);    exampleCustomer.ignoreCase().enableLike(MatchMode.ANYWHERE);    exampleCustomer.excludeZeroes();    Criteria criteria=session.createCriteria(Customer.class).add(exampleCustomer);

    List list=criteria.list();

注释:ignoreCase表示比较字符串时忽略大小写;enableLike表示样板对象中所有字符串类型的属性采用模糊比较;excludeZeroes表示样板对象中数字类型的属性为0,就不把它添加到查询语句中。如果某个属性为null,则查询语句不包含此条件。

       查询窗口中允许同时指定客户查询条件和订单查询条件,仍然可以使用QBE检索。

    Customer customer=....    Example exampleCustomer=Example.create(customer);    exampleCustomer.ignoreCase().enableLike(MatchMode.ANYWHERE);    exampleCustomer.excludeZeroes();    Order order=...    Example exampleOrder=Example.create(order);    exampleOrder.ignoreCase().enableLike(MatchMode.ANYWHERE);    exampleOrder.excludeZeroes();    Criteria criteria=session.createCriteria(Customer.class)       .add(exampleCustomer)       .createCriteria("orders")       .add(exampleOrder);

    List list=criteria.list();

 

分享到:
评论

相关推荐

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    本教程将深入探讨"day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...

    hibernate-core-5.0.11.Final.jar

    Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入...

    hibernate5--4.检索方式及策略

    一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是基于类和对象的。你可以通过HQL来查询、更新和删除对象,而无需关心底层的SQL语法。...

    hibernate-cglib-repack-2.1_3.jar

    例如,当我们试图获取一个持久化对象的属性时,如果没有被加载到内存,Hibernate会通过代理对象触发懒加载机制,从数据库中检索数据。这种动态代理的机制使得我们可以在不改变原有业务逻辑的前提下,实现数据访问的...

    hibernate-release-5.0.7.Final的所有jar包

    此外,其强大的查询语言HQL和Criteria API提供了灵活的数据检索方式。 总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的强大工具,涵盖了从数据持久化到事务处理、验证和缓存等多个...

    hibernate-release-5.3.2.Final

    1. Session接口:作为与数据库交互的主要接口,Session负责保存、更新、删除和检索对象,支持事务管理和并发控制。 2. Criteria API:提供了一种比HQL更面向对象的查询方式,可以动态构建查询条件,避免硬编码SQL...

    hibernate源码release-4.1.4.Final版

    3. Query与Criteria:提供了两种查询方式,HQL(Hibernate Query Language)是一种面向对象的查询语言,类似于SQL;Criteria API则提供了更动态、更面向对象的查询方式。 三、实体管理 Hibernate通过@Entity注解...

    hibernate-release-5.0.7 全包

    Hibernate使用它来提供更高效的注解元数据检索,提升性能。 6. **hibernate-jpa-2.1-api-1.0.0.Final.jar**:提供了JPA 2.1的API规范,使得Hibernate能够遵循这个标准,提供兼容性并支持JPA的相关特性。 7. **...

    hibernate-search-orm-5.0.0.Alpha1.zip

    Hibernate Search ORM则是Hibernate的一部分,它增强了Hibernate的能力,使其能够对存储的数据进行全文检索,支持复杂的查询和排序。 描述中的“weby.zip”似乎是一个基于Spring MVC、Hibernate的Web项目模板,适合...

    Hibernate学生-课程-成绩表的例子(many2many)

    博客链接中提到的iteye博客文章可能详细介绍了这个例子的实现步骤和注意事项,包括如何配置Hibernate,如何编写SQL语句创建关联表,以及如何测试和验证数据的正确存储和检索。如果想要深入学习和实践这个例子,建议...

    day36 04-Hibernate检索方式:多表连接查询

    标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...

    hibernate-jpa-2.1-api 1.0.0.Final API

    Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一,而JPA则是Java平台上的标准 ORM 规范,允许开发者以面向对象的方式处理数据库操作。"API"代表应用程序编程接口,通常是一系列预定义的函数、类和接口...

    Hibernate-Release-4.2.3

    Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库编程。"Hibernate-Release-4.2.3" 是Hibernate的一个特定版本,发布于2013年,是4.x系列...

    hibernate-release-5.0.11.Final

    Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,为开发者提供了便捷的数据库操作方式,极大地简化了Java应用中的数据访问层代码。在5.0.11.Final版本中,Hibernate引入了一系列的改进和优化,使其...

    hibernate程序高手秘笈-英文版

    3. **查询语言(HQL)和Criteria API**:学习使用Hibernate查询语言(HQL)进行数据检索,对比SQL的优势,同时掌握Criteria API,提供更面向对象的查询方式。 4. **Criteria和DetachedCriteria**:学习使用Criteria...

    java-Hibernate 检索

    Hibernate 是一个流行的 Java 持久层框架,它提供了多种检索数据的方式,包括导航对象图检索、OID 检索、HQL 检索、QBC 检索和本地 SQL 检索等。下面将详细介绍每种检索方式。 一、导航对象图检索 导航对象图检索...

    hibernate-release-4.2.2.Final

    Hibernate,作为一个开源的对象关系映射(ORM)框架,是Java开发中的重要工具,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将深入探讨Hibernate 4.2.2.Final版本的特性、整合框架的...

    hibernate-distribution-3.3.1.GA

    Hibernate 是一种开源的 ORM 解决方案,它允许开发者用面向对象的方式处理数据库交互。通过提供对象和数据库表之间的映射,Hibernate 消除了大量手动编写 SQL 和 JDBC 代码的需求,提高了开发效率和代码的可维护性...

    Hibernate的检索方式

    #### 四、QBC检索方式 QBC(Query By Criteria)是一种基于API的检索方式,它允许开发者通过编程方式构建查询条件。QBC使用`Criteria`、`Criterion`和`Expression`接口来定义查询条件。 **特点**: - **灵活性**:...

Global site tag (gtag.js) - Google Analytics