`
springrain515
  • 浏览: 2740 次
  • 性别: Icon_minigender_1
  • 来自: 太原
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hibernate 统计查询

阅读更多
hibernate的统计查询(转)
2009年12月27日 星期日 12:41

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多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    hibernate将本地SQL查询结果封装成对象

    当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...

    超好用的hibernate查询工具类

    4. **统计查询**:对于需要统计总数的情况,工具类可以提供`public Long countByHql(String hql, Map, Object> params)`,利用HQL计算满足特定条件的记录数。 5. **事务管理**:在执行数据库操作时,工具类还可以...

    hibernate查询语句--HQL

    ### Hibernate 查询语句 -- HQL #### 概述 Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而简化了数据访问逻辑。在 Hibernate 中,执行查询操作的主要...

    基于hibernate 通用查询框架,包含查询、分页列表 功能

    5.动态统计,用户通过界面自行配置想要的统计(构思中) Awake 在Ajax应用上存在的小瑕疵请大虾们帮忙解决:http://hi.baidu.com/jfheng/blog/item/d4a173edad9ed24979f0553f.html 感谢大家的支持,为了这个框架...

    Hibernate_query聚合函数查询.

    本篇主要探讨的是Hibernate对数据库查询中聚合函数的应用,这些功能使我们能够高效地处理数据统计和汇总任务。在学习过程中,我们经常会遇到诸如求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)以及计数...

    Hibernate-HQL-查询-Query资料

    - **聚合查询**:使用函数如COUNT、AVG、MAX、MIN、SUM进行统计计算。 - **分组查询**:根据一个或多个属性对结果进行分组。 - **排序查询**:通过ORDER BY子句对结果进行排序。 - **关联查询**:处理一对多、一...

    \Hibernate_query条件查询

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

    hibernate与mybatis一起使用取长补短

    在IT行业中,数据库操作是应用程序的核心部分,而ORM(对象关系映射)框架如Hibernate和MyBatis则是处理这些操作的利器。标题“hibernate与mybatis一起使用取长补短”暗示了在一个项目中同时采用这两种框架,旨在...

    Hibernate数据查询

    6. **统计查询** Hibernate支持COUNT、AVG、MAX、MIN和SUM等统计函数,可以用于计算总数、平均值等。 7. **缓存机制** 为了提高查询性能,Hibernate使用了二级缓存。一级缓存是Session级别的,自动管理,而二级...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    Hibernate HQL查询.docx

    - 例如,统计用户总数的查询可以这样编写: ```java String hql = "SELECT COUNT(*) FROM User"; Number count = (Number) session.createQuery(hql).uniqueResult(); System.out.println("用户总数:" + count...

    .net hibernate查询集合.doc

    通过本文档的学习,我们可以了解到在.NET环境下使用Hibernate进行集合查询时,不仅可以通过简单的`from`子句获取对象,还可以通过`select`子句指定所需属性,利用统计函数进行聚合计算,并通过`where`子句指定条件来...

    Hibernate注解方式、HQL查询

    本篇将详细探讨Hibernate的注解方式以及HQL(Hibernate Query Language)查询。 一、Hibernate注解方式 1. **实体类注解**:在Hibernate中,我们可以使用注解来定义一个Java类为数据库中的表。例如,使用`@Entity`...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    此外,`hibernate-configuration-3.0.dtd`还定义了如何设置JNDI数据源,以及如何启用二进制日志、SQL查询统计等功能。 接下来,我们转向`hibernate-mapping-3.0.dtd`。这个文件定义了Hibernate映射文件的语法规则,...

    hibernate hql各类查询范例

    以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...

    hibernate caching

    - **缓存命中率监控**:统计缓存的命中次数与未命中次数的比例。 - **事务监控**:分析事务的执行时间,以及事务内的查询和操作。 通过以上内容的学习,我们可以了解到 Hibernate 的缓存机制不仅可以显著提高应用...

    基于hibernate 通用查询 框架 Awake 基础jar包

    Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。...在软件开发中我们经常会遇到这些问题: ...Awake很好的解决了上述问题,使用Awake开发查询、统计、分页列表时,只需要做你必须做的事情,

Global site tag (gtag.js) - Google Analytics