HQL的group by和having的使用

来源:互联网 发布:倚天蝴蝶形态指标源码 编辑:程序博客网 时间:2024/06/06 20:12
一 实战
package com.cakin.view;import java.util.Iterator;import java.util.List;import java.util.Set;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import com.cakin.util.HibernateUtil;import com.sina.domain.Studcourse;import com.sina.domain.Student;public class TestMain {        public static void main(String[] args) {                //这我们举例说明hql使用                Session session=null;                Transaction tx=null;                try {                        session=HibernateUtil.getCurrentSession();                        tx=session.beginTransaction();                        //1 显示各个系的学生的平均年龄                        List<Object[]> list=session.createQuery("select avg(sage),sdept from  Student group by sdept").list();                        //取出1. for 增强                        for(Object[] obj:list){                                System.out.println(obj[0].toString()+" "+obj[1].toString());                        }                        System.out.println("******************");                        //having的使用                        //2 对分组查询后的结果,进行筛选:比如显示人数大于等于2的系名称                        //先查询各个系分别有多少学生,然后进行筛选.                        List<Object[]> list1=session.createQuery("select count(*) as c1,sdept from  Student group by sdept having count(*)>=2").list();                        //取出1. for 增强                        for(Object[] obj:list1){                                System.out.println(obj[0].toString()+" "+obj[1].toString());                        }                        System.out.println("******************");                        //3 查询女生少于200人的系                        List<Object[]> list2=session.                        createQuery("select count(*) as c1,sdept from  Student where ssex='F' group by sdept having count(*)<200").list();                        //取出1. for 增强                        for(Object[] obj:list2){                                System.out.println(obj[0].toString()+" "+obj[1].toString());                        }                        tx.commit();                } catch (Exception e) {                        e.printStackTrace();                        if(tx!=null){                                tx.rollback();                        }                        throw new RuntimeException(e.getMessage());                        // TODO: handle exception                }finally{                        if(session!=null&&session.isOpen()){                                session.close();                        }                                        }                        }}

二 测试结果
21.0 化学系
23.0 外语系
20.0 数学系
24.0 生物系
22.0 计算机系
******************
2 计算机系
******************
2 计算机系
阅读全文
0 0
原创粉丝点击