`
springrain515
  • 浏览: 2595 次
  • 性别: 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中使用Criteria Query各种QBC查询

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

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

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

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

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

    hibernate将本地SQL查询结果封装成对象。如进行复杂的统计等本地sql语句查询后,直接放到对象里了,而不会再使用Object进行强转

    Hibernate+中文文档

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    Hibernate问题解决

    Hibernate问题 <br>1、表连接的查询,当表中有外键连接其它表时,如何能一次查出所有的内容? 2、同样表连接查询,如何根据连接表的内容进行查询?同上例,如何根据rolename查询user中的信息? 3. ...

    hibernate3.2中文文档(chm格式)

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    HibernateAPI中文版.chm

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    hibernate 教程

    Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...

    基于hibernate 通用查询 Awake 框架 Demo 网址:http://hi.baidu.com/jfheng

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

    Hibernate 中文 html 帮助文档

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    Hibernate中文详细学习文档

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    基于Spring+SpringMVC+Hibernate的图书管理系统

    系统采用技术:Spring+SpringMVC+Hibernate+jQuery+Ajax+面向接口编程。 简介:该图书管理项目实现了三种角色的功能,分别是超级管理员,图书管理员和读者。在系统中,实现了图书管理,统计管理,系统管理和系统监控...

    最全Hibernate 参考文档

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的...

    基于Hibernate的业务数据统计分析的设计和实现.pdf

    讲述Hibernate的业务数据统计分析的设计和实现..............

    hibernate 体系结构与配置 参考文档(html)

    Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用...

    Hibernate教程

    4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    hibernate+中文api

    前言 ...3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory

    log-hibernate-stats:一个简单的插件,可记录有关控制器操作的Hibernate统计信息

    一个简单的Grails 3插件可以记录有关控制器操作的Hibernate统计信息。 有关Grails 2插件代码和文档,请参见: : 配置和用法 要添加此插件,请在build.gradle添加: repositories { ... maven { url ...

Global site tag (gtag.js) - Google Analytics