hibernate的统计查询:sum 取最大、取最小、分组
一、查询记录个数 count(*)关键字
测试方法如下:
package com.bjsxt.hibernate;
import java.util.List;
import org.hibernate.Session;
import junit.framework.TestCase;
public class StatQueryTest extends TestCase {
public void testQuery1(){
Session session=null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
List students=session.createQuery("select count(*) from Student").list();
//因为在list中只有一个表示记录个数的数字,所以执行这个list的get(0),取出第0个位置元素就可以了
Long count=(Long)students.get(0);
System.out.println(count);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
}
}
方法执行后,生成的SQL语句为select count(*) as col_0_0_ from t_student student0_
执行结果为:110
二、但是,上面的方式还存在缺点,查询结果取出的是list,实际上,list只有一个元素。我们还要拿到list,然后get(0)。这样不太好。
hibernate还有一种方式,如果查询后返回的是单一值,如count max sum等,可以采用它的uniqueResult,就是唯一结果的意思。这样就可以得到返回的单一的值。如果没有值返回,就是空。
测试方法如下:
public void testQuery2(){
Session session=null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
Long count=(Long)session.createQuery("select count(*) from Student").uniqueResult();
System.out.println(count);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
}
生成的查询语句与返回结果同上。
三、其他的查询:sum,max,等与count是一样的。
四、分组查询
测试方法为:
public void testQuery3(){
Session session=null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
List students=session.createQuery("select c.name,count(s) from Student s join s.classes c group by c.name order by c.name desc").list();
for(Iterator iterator=students.iterator();iterator.hasNext();){
Object[] obj=(Object[])iterator.next();
System.out.println(obj[0]+","+obj[1]);
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
}
生成的查询语句为:
select classes1_.name as col_0_0_, count(student0_.id) as col_1_0_ from t_student student0_ inner join t_classes classes1_ on student0_.classesid=classes1_.id group by classes1_.name order by classes1_.name desc
执行结果为:
班级9,10
班级8,10
班级7,10
班级6,10
班级5,10
班级4,10
班级3,10
班级2,10
班级1,10
班级0,10
2、如果查询语句改为由t_classes连接t_student,其查询结果也是一样的
public void testQuery3(){
Session session=null;
try{
session=HibernateUtils.getSession();
session.beginTransaction();
List students=session.createQuery("select c.name,count(s) from Classes c join c.students s group by c.name order by c.name desc").list();
for(Iterator iterator=students.iterator();iterator.hasNext();){
Object[] obj=(Object[])iterator.next();
System.out.println(obj[0]+","+obj[1]);
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
}
生成的SQL语句为:
select classes0_.name as col_0_0_, count(students1_.id) as col_1_0_ from t_classes classes0_ inner join t_student students1_ on classes0_.id=students1_.classesid group by classes0_.name order by classes0_.name desc
查询结果:
班级9,10
班级8,10
班级7,10
班级6,10
班级5,10
班级4,10
班级3,10
班级2,10
班级1,10
班级0,10
3、为什么两种查询方式结果是一样呢?因为第一种方式,学生表在左边,班级表在右边
第二种查询方式,班级表在左边,学生表在右边。
但其显示都会是:班级0 学生0
班级0 学生1
。。。。
班级1,学生0
班级1,学生1
。。。。
也就是先将两个表连接起来,然后再统计每个班级的学生人数,就是count(t_stdent_id).
四、readme.txt文件:
10、统计查询[重要]
*但是用hibernate做统计还是比较少的,通常采用统计的中间件。就是说,大量的统计,大量的报表,通常采用工具来做。
相关推荐
本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...
当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...
4. **统计查询**:对于需要统计总数的情况,工具类可以提供`public Long countByHql(String hql, Map, Object> params)`,利用HQL计算满足特定条件的记录数。 5. **事务管理**:在执行数据库操作时,工具类还可以...
### Hibernate 查询语句 -- HQL #### 概述 Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而简化了数据访问逻辑。在 Hibernate 中,执行查询操作的主要...
5.动态统计,用户通过界面自行配置想要的统计(构思中) Awake 在Ajax应用上存在的小瑕疵请大虾们帮忙解决:http://hi.baidu.com/jfheng/blog/item/d4a173edad9ed24979f0553f.html 感谢大家的支持,为了这个框架...
本篇主要探讨的是Hibernate对数据库查询中聚合函数的应用,这些功能使我们能够高效地处理数据统计和汇总任务。在学习过程中,我们经常会遇到诸如求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)以及计数...
- **聚合查询**:使用函数如COUNT、AVG、MAX、MIN、SUM进行统计计算。 - **分组查询**:根据一个或多个属性对结果进行分组。 - **排序查询**:通过ORDER BY子句对结果进行排序。 - **关联查询**:处理一对多、一...
《Hibernate查询条件查询详解》 Hibernate作为Java领域中广受欢迎的对象关系映射(ORM)框架,极大地简化了数据库操作。其强大的查询能力是其核心功能之一。本篇将深入探讨Hibernate的条件查询,帮助开发者更好地...
在IT行业中,数据库操作是应用程序的核心部分,而ORM(对象关系映射)框架如Hibernate和MyBatis则是处理这些操作的利器。标题“hibernate与mybatis一起使用取长补短”暗示了在一个项目中同时采用这两种框架,旨在...
6. **统计查询** Hibernate支持COUNT、AVG、MAX、MIN和SUM等统计函数,可以用于计算总数、平均值等。 7. **缓存机制** 为了提高查询性能,Hibernate使用了二级缓存。一级缓存是Session级别的,自动管理,而二级...
### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...
- 例如,统计用户总数的查询可以这样编写: ```java String hql = "SELECT COUNT(*) FROM User"; Number count = (Number) session.createQuery(hql).uniqueResult(); System.out.println("用户总数:" + count...
通过本文档的学习,我们可以了解到在.NET环境下使用Hibernate进行集合查询时,不仅可以通过简单的`from`子句获取对象,还可以通过`select`子句指定所需属性,利用统计函数进行聚合计算,并通过`where`子句指定条件来...
本篇将详细探讨Hibernate的注解方式以及HQL(Hibernate Query Language)查询。 一、Hibernate注解方式 1. **实体类注解**:在Hibernate中,我们可以使用注解来定义一个Java类为数据库中的表。例如,使用`@Entity`...
此外,`hibernate-configuration-3.0.dtd`还定义了如何设置JNDI数据源,以及如何启用二进制日志、SQL查询统计等功能。 接下来,我们转向`hibernate-mapping-3.0.dtd`。这个文件定义了Hibernate映射文件的语法规则,...
以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...
- **缓存命中率监控**:统计缓存的命中次数与未命中次数的比例。 - **事务监控**:分析事务的执行时间,以及事务内的查询和操作。 通过以上内容的学习,我们可以了解到 Hibernate 的缓存机制不仅可以显著提高应用...
Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。...在软件开发中我们经常会遇到这些问题: ...Awake很好的解决了上述问题,使用Awake开发查询、统计、分页列表时,只需要做你必须做的事情,