一 实战
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 计算机系