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中使用Criteria Query各种QBC查询
5.动态统计,用户通过界面自行配置想要的统计(构思中) Awake 在Ajax应用上存在的小瑕疵请大虾们帮忙解决:http://hi.baidu.com/jfheng/blog/item/d4a173edad9ed24979f0553f.html 感谢大家的支持,为了这个框架...
Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。...在软件开发中我们经常会遇到这些问题: ...Awake很好的解决了上述问题,使用Awake开发查询、统计、分页列表时,只需要做你必须做的事情,
hibernate将本地SQL查询结果封装成对象。如进行复杂的统计等本地sql语句查询后,直接放到对象里了,而不会再使用Object进行强转
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问题 <br>1、表连接的查询,当表中有外键连接其它表时,如何能一次查出所有的内容? 2、同样表连接查询,如何根据连接表的内容进行查询?同上例,如何根据rolename查询user中的信息? 3. ...
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环境下...
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查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...
Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。 在软件开发中我们经常会遇到这些问题: ...Awake很好的解决了上述问题,使用Awake开发查询、统计、分页列表时,只需要做你必须做的事情,
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环境下...
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+jQuery+Ajax+面向接口编程。 简介:该图书管理项目实现了三种角色的功能,分别是超级管理员,图书管理员和读者。在系统中,实现了图书管理,统计管理,系统管理和系统监控...
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的业务数据统计分析的设计和实现..............
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环境下使用...
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的...
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环境下...
前言 ...3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory
一个简单的Grails 3插件可以记录有关控制器操作的Hibernate统计信息。 有关Grails 2插件代码和文档,请参见: : 配置和用法 要添加此插件,请在build.gradle添加: repositories { ... maven { url ...