转自: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、动态查询
HQL和QBC都能完成许多相同的任务,相比之下,HQL能够直观地表达复杂的查询语句,而QBC表达复杂的查询语句很麻烦。
如果在程序运行前就明确了查询语句的内容(也称静态查询),应该优先考虑HQL查询方式。但是,如果只有在程序运行时才能明确查询语句的内容(也称动态查询),QBC比HQL更加的方便。
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检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...
Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入...
一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是基于类和对象的。你可以通过HQL来查询、更新和删除对象,而无需关心底层的SQL语法。...
例如,当我们试图获取一个持久化对象的属性时,如果没有被加载到内存,Hibernate会通过代理对象触发懒加载机制,从数据库中检索数据。这种动态代理的机制使得我们可以在不改变原有业务逻辑的前提下,实现数据访问的...
此外,其强大的查询语言HQL和Criteria API提供了灵活的数据检索方式。 总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的强大工具,涵盖了从数据持久化到事务处理、验证和缓存等多个...
1. Session接口:作为与数据库交互的主要接口,Session负责保存、更新、删除和检索对象,支持事务管理和并发控制。 2. Criteria API:提供了一种比HQL更面向对象的查询方式,可以动态构建查询条件,避免硬编码SQL...
3. Query与Criteria:提供了两种查询方式,HQL(Hibernate Query Language)是一种面向对象的查询语言,类似于SQL;Criteria API则提供了更动态、更面向对象的查询方式。 三、实体管理 Hibernate通过@Entity注解...
Hibernate使用它来提供更高效的注解元数据检索,提升性能。 6. **hibernate-jpa-2.1-api-1.0.0.Final.jar**:提供了JPA 2.1的API规范,使得Hibernate能够遵循这个标准,提供兼容性并支持JPA的相关特性。 7. **...
Hibernate Search ORM则是Hibernate的一部分,它增强了Hibernate的能力,使其能够对存储的数据进行全文检索,支持复杂的查询和排序。 描述中的“weby.zip”似乎是一个基于Spring MVC、Hibernate的Web项目模板,适合...
博客链接中提到的iteye博客文章可能详细介绍了这个例子的实现步骤和注意事项,包括如何配置Hibernate,如何编写SQL语句创建关联表,以及如何测试和验证数据的正确存储和检索。如果想要深入学习和实践这个例子,建议...
标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...
Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一,而JPA则是Java平台上的标准 ORM 规范,允许开发者以面向对象的方式处理数据库操作。"API"代表应用程序编程接口,通常是一系列预定义的函数、类和接口...
Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库编程。"Hibernate-Release-4.2.3" 是Hibernate的一个特定版本,发布于2013年,是4.x系列...
Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,为开发者提供了便捷的数据库操作方式,极大地简化了Java应用中的数据访问层代码。在5.0.11.Final版本中,Hibernate引入了一系列的改进和优化,使其...
3. **查询语言(HQL)和Criteria API**:学习使用Hibernate查询语言(HQL)进行数据检索,对比SQL的优势,同时掌握Criteria API,提供更面向对象的查询方式。 4. **Criteria和DetachedCriteria**:学习使用Criteria...
Hibernate 是一个流行的 Java 持久层框架,它提供了多种检索数据的方式,包括导航对象图检索、OID 检索、HQL 检索、QBC 检索和本地 SQL 检索等。下面将详细介绍每种检索方式。 一、导航对象图检索 导航对象图检索...
Hibernate,作为一个开源的对象关系映射(ORM)框架,是Java开发中的重要工具,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将深入探讨Hibernate 4.2.2.Final版本的特性、整合框架的...
Hibernate 是一种开源的 ORM 解决方案,它允许开发者用面向对象的方式处理数据库交互。通过提供对象和数据库表之间的映射,Hibernate 消除了大量手动编写 SQL 和 JDBC 代码的需求,提高了开发效率和代码的可维护性...
#### 四、QBC检索方式 QBC(Query By Criteria)是一种基于API的检索方式,它允许开发者通过编程方式构建查询条件。QBC使用`Criteria`、`Criterion`和`Expression`接口来定义查询条件。 **特点**: - **灵活性**:...