`
txf2004
  • 浏览: 7132806 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HQL查询

 
阅读更多
一、HQL语言
HQL语句与SQL语句相似,其基本的使用习惯也与SQL相同。由于HQL是面向对象的查询语句,所以它需要从目标对象中查询信息并返回匹配单个实体对象或多个实体对象的集合,而SQL语句是从数据库的表中查找指定信息,返回的是单条信息或多个信息的集合。
HQL语句区分大小写的
HQL的基本语法:
select "对象.属性名"
from "对象"
where "过滤条件"
group by "对象.属性名" having "分组条件"
order by "对象名.属性名"
实际应用中,
select * from People p where p.id='1'
等价于
from People p where p.id='1'
该HQL语句是查询过滤从数据库信息返回的实体对象的集合,其过滤的条件为对象属性"id"为1,其中People为实体对象
二、实体对象查询
在HQL语句中,可以通过from子句对实体对象进行直接查询:
from People
在大多数情况下,最好为查询的实体对象指定一个别名,以方便在查询语句的其它地方引用实体对象,别名的命名方法如下:
from People p
别名的首字母最好小写,这是HQL语句的规范写法,与Java中变量的命名规范是一致的,以避免与语句中的实体对象混淆。
上面的HQL语句将查询数据库的实体对象People所对应的所有数据,并以封装好的People对象的集合的形式返回。但是上面的语句有个局限性,它会查询实体对象People映射的所有数据库字段,相当于SQL语句的"SELECT *"。那么,HQL如何获取指定的字段信息?在HQL中需要通过动态实例化查询来实现这个功能,示例如下:
select new People(id,name) from People p

此种查询方式通过"new"关键字对实体对象动态实例化,将指定的实体对象属性进行重新封装,既不失去数据的封装性,又可以提高查询的效率。
在上面的语句中,最好不要使用下面的语句进行查询:

select p.id,p.name from People p

因为此语句返回的不是原有的对象实体状态,而是一个object类型的数据,它破坏了数据原有的封装性。
三、条件对象查询
例如:

from People p where p.sex="男"

四、HQL参数绑定机制:
参数绑定机制可以使查询语句和参数具体值相互独立,不但能提高程序的开发效率,还可以有效的防止SQL的注入攻击。
1.利用顺序占位符"?"替代具体参数在HQL语句中可以通过顺序占位符"?"替代具体的参数值,利用Query对象的setParameter()方法对其进行赋值,此种操作方式与JDBC中的PreparedStatement对象的参数绑定方式相似。
例如:

Session session=HibernateInitialize.getsession();
List peopleList=new ArrayList();
String hql="from People p where p.sex=?";
Query query=session.createQuery(hql);
query.setParameter(0,"男");
peopleList=query.list();

2.利用引用占位符":parameter"替代具体的参数
HQL语句除了支持顺序占位符"?"以为,还支持引用占位符":parameter",引用占位符是":"号与自定义参数名的组合。
例如:

Session session=HibernateInitialize.getsession();
List peopleList=new ArrayList();
String hql="from People p where p.sex=:sex";
Query query=session.createQuery(hql);
query.setParameter("sex","男");
peopleList=query.list();

五、排序查询
在SQL中,通过order by 子句和asc、desc关键字实现查询结果集的排序操作,asc是正序排列,desc是降序排列。HQL查询中同样提供了此功能,只是排序的条件参数换成了实体对象的属性
按年龄的倒序排列:

from People p order by p.age desc

按照id的正序排列:

from People p order by p.id asc

六、聚合函数
HQL查询语句支持SQL中常用的聚合函数,如sum 、avg、count、max、min等,其使用方法与SQL中基本相同。
如:

select avg(p.age) from People p 

用于计算所有人的平均年龄
又如:

select max(p.age) from People p

用于查询所有人中的年龄最大的这个人的信息
七、分组查询
在HQL查询语言中,使用group by子句进行分组操作,其使用与SQL语句相同。在HQL中,同样可以使用group by子句使用having子句,不过这需要底层数据库的支持。
如:

select p.sex,count(*) from People p group by p.sex

注意,HQL分组查询语句中的分组条件,也就是group by子句后的参数必须包含在查询的结果中。
由于分组查询破坏了实体对象的原来的状态,所以结果集返回的是对象数组。
八、子查询
HQL支持子查询,不过需要底层数据库的支持。HQL中的一个子查询必须被圆括号()包起来

from People p where p.age>(select avg(age) from People)

九、联合查询
HQL支持SQL中的内连接(inner join)、左外连接查询(left outer join)、右外连接查询(right outer join)和全连接查询(full join)
如,在班级表和学生表中一对一映射关系,可以通过HQL的左连接方式获取关联信息
如:

select s.number,s.name,s.age,s.sex,c.id from Student s left join Class c
分享到:
评论

相关推荐

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    HQL查询pdf资料

    ### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...

    SSH笔记-HQL查询、QBC、本地SQL查询

    SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询

    Hibernate HQL查询 分页查询 模糊查询.docx

    这里的关键点在于使用`createQuery`方法创建了一个HQL查询对象,并通过`setString`方法设置参数值,最后通过`list`方法执行查询并获取结果列表。 #### 三、分页查询 分页查询在处理大量数据时非常有用,可以有效地...

    Spring中常用的hql查询方法

    ### Spring框架中HQL查询方法详解 在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用...

    HQL查询语言基础知识

    HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于在 Hibernate 框架中查询数据库。HQL 查询语言基础知识是 Hibernate 中的基础组件之一,对于开发人员来说,掌握 HQL 查询语言...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...

    HibernateUtil分装完整版HQL查询

    标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...

    HQL查询语言基础.

    **HQL查询语言基础** HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理...

    Hibernate之HQL查询

    HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...

    hibernate 查询?Hibernate的HQL查询

    【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...

    HQL查询.ppt

    HQL查询 帮助文档

    Hibernate hql查询语法总结

    《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...

    常用易懂,易会HQL查询

    本文将深入探讨“常用易懂,易会”的HQL查询,帮助你快速上手并熟练掌握这一技能。 1. **HQL基础概念** HQL是Hibernate提供的面向对象的查询语言,与SQL类似,但更加面向对象,减少了数据库方言的差异,提高了代码...

    第三章HQL查询

    HQL查询

    HQL 查询语言基础 二

    在HQL查询语言中,`FROM`子句用于指定查询数据来源的实体或表。例如: ```hql FROM Person as p ``` 这里的`Person`表示的是一个持久化类,即ORM映射中的实体类。`as p`则定义了一个别名`p`,方便后续在查询语句中...

    Hibernate注解方式、HQL查询

    在实际项目中,结合Hibernate的注解方式和HQL查询,开发者可以高效地处理数据库操作,降低了SQL编写的工作量,提高了代码的可读性和可维护性。同时,Hibernate还提供了Criteria API和Querydsl等其他查询方式,提供了...

    hql查询多个实体类,类之间没有外键关联

    hql查询多个实体类,类之间有外键关系,但是没有外键关联

    Hibernate HQL查询.docx

    ### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...

    超级详细的hql查询语句教程

    ### HQL查询语句详解 #### 一、HQL简介 Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。...

Global site tag (gtag.js) - Google Analytics