HQL(Hibernate Query Language)查询语言是完全面向对象的查询语言,它提供了更加面向对象的封装,它可以理解如多态、继承和关联的概念。HQL看上去和SQL语句相似,但它却提供了更加强大的查询功能。

1. 了解HQL语言

HQL语句与SQL语句是相似的,其基本的使用习惯也与SQL相同。由于HQL是面向对象的查询语言,说以它需要从目标对象中查询信息并返回匹配单个实体对象或多个实体对象的集合,而SQL语句是从数据库表中查找指定的信息,返回的是单条信息或多条信息的集合。

注意:HQL语句是区分大小写的,虽然SQL语句并不区分大小写。因为HQL是面向对象的查询语句,它的查询目标是实体对象,也就是java类,java类是区分大小写的,所以HQL也是区分大小写的。

HQL的基本语法如下:

  1. select "对象.属性名"
  2. from "对象"
  3. where "过滤条件"
  4. group by "对象.属性名" having "分组条件"
  5. order by "对象.属性名"

例1.1 在实际应用中的HQL语句。

  1. select * from Employee emp where emp.flag="1"

该语句等价于:

  1. from Employee emp where emp.flag="1"

其中Employee为实体对象。Hibernate在3.0版本以后可以使用HQL执行update和delete的操作,但是并不推荐使用这种方式。

2. 实体对象查询

在HQL语句中,可以通过from字句对实体对象进行直接查询。

例2.1 通过from字句查询实体。

  1. from Person

在大多数情况下,最好为查询的实体对象指定一个别名,方便在查询语句的其它地方引用实体对象。别名的命名方法如下:

  1. from Person per

技巧:别名的首字母最好小写,这是HQL语句的规范写法,与Java中变量的命名规则是一致的,避免与语句中的实体对象混淆。

上面的HQL语句将查询数据库中实体对象Person所对应的所有数据,并以封装好的Person对象的集合形式返回。

例2.2 通过from字句查询指定字段数据。

  1. select Person(id,name) from Person per

这种查询方式,通过new关键字对实体对象动态实例化,将指定的实体对象属性进行重新封装,既不失去数据的封装性,又可提高查询的效率。

注意:在上面的语句中最好不要使用下面的语句进行查询,例如:

  1. select per.id,per.name from Person per

因为此语句返回的并不是原有的对象实体状态,而是一个Object类型的数组,它破坏了数据原有的封装性。

更详细的内容参见下面的链接:

Hibernate 的HQL,QBC 查询语言

Hibernate查询语言HQL 八大要点

Hibernate查询语言的更多相关文章

  1. Hibernate学习-Hibernate查询语言HQL

    HQL(Hibernate Query Language)Hibernate查询语言,语法类似于SQL,可以直接使用实体类及属性. 使用HQL 可以避免使用JDBC 查询的一些弊端 不需要再编写繁复的 ...

  2. HQL: Hibernate查询语言

    HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可 ...

  3. Hibernate查询语言(HQL)

    Hibernate查询语言(HQL)与SQL(结构化查询语言)相同,但不依赖于数据库表. 我们在HQL中使用类名,而不是表名. 所以是数据库独立的查询语言. HQL的优点 HQL有很多优点. 它们如下 ...

  4. 类型:。net;问题:HQL;结果:HQL: Hibernate查询语言

    HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可 ...

  5. Hibernate 查询语言

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

  6. Hibernate查询语言——HQL

    HQL(Hibernate Query Language)查询语言是完全面向对象的查询语言,它提供了更加面向对象的封装,可以理解如多态.继承和关联. HQL的基本语法如下: select " ...

  7. Java进阶知识13 Hibernate查询语言(HQL),本文以hibernate注解版为例讲解

    1.简单概述 1.1. 1) SQL:面向的是数据库 select * from tableName;2) HQL查询(Hibernate Query language): hibernate 提供的 ...

  8. 027 hibernate查询语言(HQL)

    概述:数据查询与检索是Hibernate中的一个亮点,相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制. 标准化对象查询(Criteria Query):以对象的方式进行查询,将查询 ...

  9. Hibernate批量处理数据

    01.批量插入数据 步骤一.创建实体类,Dept和Emp /** * 员工类 * @author Administrator * */ public class Emp { private Integ ...

随机推荐

  1. 安装 jupyter notebook 出现 ModuleNotFoundError: No module named 'markupsafe._compat' 错误

    使用 python -m pip install jupyter 安装完成 jupyter notebook 之后,在命令行界面输入 "jupyter notebook "指令打开 ...

  2. centos6.5挂载windows共享的文件夹

    参考:http://www.centoscn.com/CentOS/Intermediate/2014/0318/2619.html http://www.ailab.cn/article/20150 ...

  3. USACO 控制公司 Controlling Companies

    友情链接神犇520的博客 题目: 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了 ...

  4. Xamarin 2017.9.19更新

     Xamarin 2017.9.19更新   本次更新是添加Xamarin.iOS对iOS 11和Xcode 9的支持.Visual Studio 2017升级到15.3.5获得更新功能.Visual ...

  5. 理解裸机部署过程ironic

    部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...

  6. 2016 湖南省省赛B题《有向无环图》

    题目链接[https://vjudge.net/problem/CSU-1804] 题意: 给出一个有向无环图,然后让你算下面的结果,count(i,j)表示i->j之间的路径条数. 题解: 根 ...

  7. 【UOJ #105】【APIO2014】Beads and wires

    http://uoj.ac/problem/105 好神的dp啊. 确定一个点为根之后,蓝线只能是竖着的,不能横跨兄弟. 枚举每个点为根进行树形dp是\(O(n^2)\)的,\(f(x,0/1)\)表 ...

  8. AtcoderGrandContest 016 D.XOR Replace

    $ >AtcoderGrandContest \space 016 D.XOR\space Replace<$ 题目大意 : 有两个长度为 \(n\) 的数组 \(A, B\) ,每次操作 ...

  9. BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化

    http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...

  10. python3-开发进阶Flask的基础(2)

    知识回顾 1.django 和flask区别? 最大的不同就是django请求相关的数据,通过参数一个一个传递过去的,而flask就是先把放在某个地方,然后去取,这个东西叫上下文管理 2.什么是wsg ...