Hibernate的八大类HQL查询集合: 

一:属性查询(SimplePropertyQuery) 
1,单一属性查询 
*返回结果集属性列表,元素类型和实体类中相应的属性一致 
2, 多个属性查询, 
* 返回集合中的元素是object数组, 
* 其中数组元素的类型和对应属性在实体类中的类型一致 
代码: 
for(Iterator iterator=list.iterator();iterator.hasNext();) 

Object[] obj=(Object[])iterator.next(); 
System.out.println("sid:="+obj[0].toString()+"   sname:="+obj[1]); 

3, 通过hql来动态实例化对象 
代码: 
List list=session.createQuery("select new Student(sid,sname) from Student").list(); 

for (Iterator iterator=list.iterator();iterator.hasNext();){ 
Student student=(Student) iterator.next(); 
System.out.println("sid:="+student.getSid()+"   sname:="+student.getSname()); 

4,采用别名查询 
代码: 
//List list=session.createQuery("select s.sid, s.sname from Student as s").list(); 
List list=session.createQuery("select s.sid, s.sname from Student s").list(); 

二:简单对象查询(SimplyObjectQuery) 
1,返回对象集合(可以忽略select) 
代码: 
//List list=session.createQuery("from Student").list(); 
//List list=session.createQuery("from Student as s").list(); 
List list=session.createQuery("from Student s").list(); 
2,采用select查询对象 
* 必须要使用别名 
代码: 
//List list=session.createQuery("select s from Student as s").list(); 
List list=session.createQuery("select s from Student s").list(); 
3,查询单一对象的操作 
代码: 
Object obj=session.createQuery("select s from Student s where s.sid=:mysid") 
.setParameter("mysid", 12) 
.uniqueResult(); 
4,分页查询 
* setFirstResult(int firstResult) 
* Set the first row to retrieve. 
* If not set, rows will be retrieved beginnning from row 0. 
* firstResult - a row number, numbered from 0 
代码: 
List list=session.createQuery("select s from Student s") 
   .setFirstResult(5) 
   .setMaxResults(5) 
   .list(); 
三:简单条件查询(SimpleConditionQuery) 
1,可以拼凑字符串 
代码: 
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like '%1%'").list(); 
2,注意:可以采用?占位的方式来传递参数 
*参数的索引从0开始 
*传递的参数值不能用''号括起来 
*注意方法链编程 
代码: 
/* 
*Query query=ession.createQuery("select s.sid, s.sname from Student as s where s.sname like ?"); 
*query.setParameter(0, "%1%"); 
*List stuList=query.list(); 
*/ 
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like ?") 
    .setParameter(0, "%1%") 
    .list(); 
3,通过参数名(:参数名)传参的方式进行查询 
代码: 
/*Object obj=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid") 
    .setParameter("myname", "%1%") 
    .setParameter("myid", 98) 
    .uniqueResult();//.list(); 

Object[] objs=(Object[])obj; 
System.out.println("s.sid:="+objs[0].toString()+"  s.sname:="+objs[1].toString()); 
*/ 
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid") 
    .setParameter("myname", "%1%") 
    .setParameter("myid", 98) 
    .list(); 
4,传递多个参数的查询 
* 支持in查询,需要setParameterList("myids", new Object[]{12,13,14})的方式进行参数传递
代码: 
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.id in(:myids)") 
    .setParameterList("myids", new Object[]{12,13,14}) 
    .list(); 
5, 查询2009年2月入学的学员信息 
*支持Sql函数查询 
代码: 
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where year(s.schoolDate)=:myyear and month(s.schoolDate)=:mymonth") 
    .setParameter("myyear", 2009) 
    .setParameter("mymonth", 2) 
    .list(); 
6,查询2009-02-10到2009-02-15号入学的学员信息 
*注意:在进行日期查询时 
*setParameter("startDate", formatter.parse("2009-02-10 00:00:00")) 
*方法中第二个参数是一个Object对象(Date类型对象) 
代码: 
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where s.schoolDate between :startDate and :endDate") 
    .setParameter("startDate", formatter.parse("2009-02-10 00:00:00")) 
    .setParameter("endDate", formatter.parse("2009-02-15 23:59:59")) 
    .list(); 
四:原生SQL语句查询(SqlQueryTest_4) 
*这里用的是createSQLQuery().list(); 
代码: 
List stuList=session.createSQLQuery("select * from Student").list(); 
五:外置命名查询(NamedQueryTest_5) 
* 1.在映射文件中采用<query>标签来定义HQL语句,不必限定文件!!!注意:映射文件中的HQL语句不可以出错,否则会导致 QuerySyntaxException,特别是要查询的实体类名写错的情况。(Error in named query: selectAllStudents org.hibernate.hql.ast.QuerySyntaxException: Students is not mapped)。 
* 2.在程序中通过session.getNamedQuery(hql_name)得到查询语句 
代码: 
List list=session.getNamedQuery("selectAllStudents") 
.setParameter("mysid",12).list(); 
六:对象导航查询(ObjectNavQueryTest_6) 
代码: 
List list= session.createQuery("select s.sname from Student as s where s.clsInfo.cname like :myname") 
      .setParameter("myname", "%1%") 
      .list(); 
七:联合查询(JoinQueryTest_7) 
1,联合查询* 内连接查询 
* 获取已经参加班级报名的所有学生名号和其所在班级名称 
代码: 
List list=session.createQuery("select s.sname,c.cname from Student as s join s.clsInfo as c").list(); 
2,联合查询* 左连接查询 
* 获取所有班级名称和其学员姓名 
* 以班级信息表为主表,进行左外连接查询 
代码: 
List list=session.createQuery("select c.cname ,s.sname from ClassInfo as c left join c.studentSet as s").list(); 
3,联合查询 * 右连接查询 
* 获取所有学员姓名和其所属班级名称 
* 以学员信息表为主表,进行右外连接查询 
代码: 
List list=session.createQuery("select s.sname, c.cname  from ClassInfo as c right join c.studentSet as s").list(); 
八:(StateQueryTest_8) 
1,聚合函数使用 
代码: 
//List list=session.createQuery("select count(*) from Student").list(); 
//long count=(Long) list.get(0); 

long count=(Long) session.createQuery("select count(*) from Student").uniqueResult();
2,分组查询 
代码: 
List list=session.createQuery("select c.cname, count(s) from Student as s inner join s.clsInfo as c group by c.cname order by c.cname").list(); 

Hibernate--------八大类HQL查询集合的更多相关文章

  1. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  2. 【Hibernate步步为营】--hql查询小介

    HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...

  3. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  4. Hibernate用到HQL查询时的错误

    Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...

  5. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  6. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  7. Hibernate学习之hql查询语句

    *  页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接  结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...

  8. Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据

    俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...

  9. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

随机推荐

  1. [转]HttpModule的认识

    HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...

  2. iOS中空字符串报错

    *参考: http://www.ithao123.cn/content-8030945.html *参考: http://www.cnblogs.com/ziyi--caolu/p/4825633.h ...

  3. oracle容器化docker解决方案

    Docker提供了轻量级的虚拟化,它几乎没有任何额外开销. 提供了一个从开发到上线均一致的环境. 开发效率:一是我们想让开发环境尽量贴近生产环境 二是我们想快速搭建开发环境   基于docker研发小 ...

  4. SqlServer SET IDENTITY_INSERT ON | OFF

    想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT 示例: 1.首先建立一个有标识列的表: )) 2.尝试在表中做以下操作: , 'gar ...

  5. 关于 IIS 中 Excel 访问的问题

    关于 IIS 上 Excel 文件的访问, 一路上困难重重, 最后按以下步骤进行设置, 可在 IIS 中正常使用! 1. 引用及代码: 1). 项目中添加 Excel 程序集引用(注意: 从系统 CO ...

  6. MySql存储过程

    MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...

  7. [Top-Down Approach] Chatper 3 Notes

    这里留下空白,提醒自己,第一章第二章尚待整理回顾. 此处缺了3.6/3.7两节拥塞控制的内容

  8. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决

    一.[root@openstack-server ~]# nova listERROR (CommandError): You must provide a username or user id v ...

  9. 记一次企业级爬虫系统升级改造(二):基于AngleSharp实现的抓取服务

    爬虫系统升级改造正式启动: 在第一篇文章,博主主要介绍了本次改造的爬虫系统的业务背景与全局规划构思: 未来Support云系统,不仅仅是爬虫系统,是集爬取数据.数据建模处理统计分析.支持全文检索资源库 ...

  10. 1.ios synthesize有什么作用

    ###1.ios synthesize有什么作用 当定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,所以Xcode提供了@property和@synthe ...