Hibernate学习之HQL详解2

uniqueResult方法
如果我们检索一个对象,明确知道最多只有一个对象 ,则建议使用该方法:
具体用法如下:
Student s=(Student) session.createQuery("from Student where sid='20050003'").uniqueResult();
System.out.println(s.getSname());

distinct的用法
过滤重复的记录
//比如,显示所有学生的性别和年龄.
List list=session.createQuery("select distinct sage,ssex from Student").list();
for(int i=0;i<list.size();i++){
    Object []  objs=(Object[]) list.get(i);
    System.out.println(objs[0].toString()+" "+objs[1].toString());
}

between and..
List list=session.createQuery("select distinct sage,ssex,sname from Student where sage between 20 and 22").list();
for(int i=0;i<list.size();i++){
    Object []  objs=(Object[]) list.get(i);
    System.out.println(objs[0].toString()+" "+objs[1].toString()+objs[2].toString());
}

in /not in
//查询计算机系和外语系的学生信息          
List<Student> list=session.createQuery("from Student where sdept in ('计算机系','外语系')").list();
//取出1. for 增强
for(Student s:list){
    System.out.println(s.getSname()+" "+s.getSaddress()+" "+s.getSdept());
}

group by使用
//显示各个系的学生的平均年龄
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());
}

having的使用
//1.对分组查询后的结果,进行筛选:比如请显示人数大于3的系名称
//a. 查询各个系分别有多少学生.           
List<Object[]> list=session.createQuery("select count(*) as c1,sdept from  Student group by sdept having count(*)>3").list();
//取出1. for 增强
for(Object[] obj:list){
    System.out.println(obj[0].toString()+" "+obj[1].toString());
}

查询计算机系共多少人?->如果我们返回的是一列数据
//这时我们的取法是直接取出list->object 而不是 list->Object[]
List<Object[]> list=session.
createQuery("select sage from  Student where sdept='计算机系'").list();
//取出1. for 增强
for(Object obj:list){
    System.out.println(obj.toString());
}

查询选修11号课程的最高分和最低分.
List<Object[]> list=session.createQuery("select 11,max(grade),min(grade) from Studcourse where course .cid=11").list();
//取出1. for 增强
for(Object[] obj:list){
    System.out.println(obj[0].toString()+" max="+obj[1].toString()+" min="+obj[2].toString());
}

显示各科考试不及格学生的名字(Student-student),科目(Course-course)和分数(Studcourse-studcourse)
List<Object[]> list=session.
createQuery("select student.sname,course.cname,grade from Studcourse where grade>=60").list();
//取出1. for 增强
for(Object[] obj:list){
    System.out.println(obj[0].toString()+" "+obj[1].toString()+" "+obj[2].toString());
}

计算各个科目不及格的学生数量.
List<Object[]> list=session.createQuery("select count(*),student .sdept from Studcourse where grade<60 group by student .sdept").list();
//取出1. for 增强
for(Object[] obj:list){
    System.out.println(obj[0].toString()+" "+obj[1].toString());
}

Query q=session.createQuery(hql);
q.setFirstResult (从第几条取//从0开始计算);
q.setMaxResult (取出几条);
请按照学生的年龄从小->大,取出第3到第5个学生
List<Student> list=session.createQuery("from Student  order by sage").setFirstResult(2).setMaxResults(3).list();
for(Student s: list){
    System.out.println(s.getSname()+" "+s.getSage());
}

猜你喜欢

转载自chenzheng8975.iteye.com/blog/1675795