通过对Hibernate框架的学习,已经慢慢的对Hibernate有了进一步的了解,接下来我们要说的是HibernateQusery
Language(HQL),如果你正在学习SSH框架,那SQL对你来说也是不陌生的,通过学习会发现HQL跟SQL有很多的相似之处.

在学习的过程中通过对比找到两个知识点的联系,包括相同点和不同点,通过重点学习那些不同点将会大大减少我们学习的成本.因为HQL跟SQL有很大的相似处,尤其是语法,所以HQL的学习建立在SQL的基础之上,那对HQL的掌握变非常容易.

HQL和SQL不同点

第一点(从宏观的角度)

SQL是基于关系型数据库模型,没有面向对象的特点,而HQL是面向对象编程跟数据库关系的组合.因为这个不同点即HQL所具有的面向对象的特点.便有了接下来的不同之处.

第二点(操作内容):

SQL更关注存在数据库中的表,并对表的一些操作,而HQL更关心对象及其属性的操作.

第三点(处理的关系):

SQL更多处理的是表和表之间的关系,HQL则是处理对象之间的关系.

以上的对比是从一个宏观的角度对他们的对比,接下来我们将会从HQL具体的语法和简单的运用来逐渐掌握了HQL的基本用法.

  • 需要说明的是在hql中关键字是不区分大小写,通常小写但是类的名称和属性名称必须区分大小写,因为面向对象的特征.

    • 例如:fromStudent
      s where s.id<2跟fromStudent
      s where s.ID<2是不一样的.
  • from子句
    • 例如:HQL的"from Student".相当于Sql的"select
      * from Student"从这点可以看出来HQL比SQL简洁了一些.
  • 带参数查询(两种查询方式)

采用?方式,查询学号为1,2的学生

Liststudents = session.createQuery("select s.id, s.name from Student s wheres.id in(?, ?, ?, ?, ?)")

.setParameter(0,1)

.setParameter(1,2)

.list();

采用 :参数名方式,查询学号为1,2的学生

Liststudents = session.createQuery("select s.id, s.name from Student s wheres.id in(:ids)")

.setParameterList("ids",new Object[]{1, 2})

.list();

  • 查询数量(查询所有学生数目)

    • Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();
    • 另一种查询方式

Longcount = (Long)session.createQuery("select count(*) from Student")

.setMaxResults(1)

.uniqueResult();

  • 在HQL中查询原生sql语句

    • List students = session.createSQLQuery("select * from t_student").list();
  • 分页查询

Liststudents = session.createQuery("from Student")

.setFirstResult(1)

.setMaxResults(2)

.list();

  • ……

以上是对HQL的一些基本的介绍,建议在进行Hibernate的过程中可以在Hibernate核心配置文件配上以下属性:

<propertyname="hibernate.show_sql">true</property>

这样在程序执行HQL语句时可以看到具体的Sql执行情况.通过查看Sql的执行情况我们也会看到Hibernate存在的一些问题,例如N+1问题.

希望通过以上的内容能够对HQL有个基本认识,接下来还需要在实践中提高.

对HQL的一句话总结为:面向对象的SQL.

Hibernate 之 HQL的更多相关文章

  1. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

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

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

  3. Hibernate之HQL查询

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

  4. Hibernate之HQL介绍

    Hibernate中提供了多种检索对象的方式,主要包括以下种类: 导航对象图检索方式:根据已经加载的对象导航到其他对象 OID检索方式:根据对象的OID来检索对象 HQL检索方式:使用面向对象的HQL ...

  5. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  6. Hibernate 的hql查询简介【申明:来源于网络】

    Hibernate 的hql查询简介[申明:来源于网络] Hibernate 的hql查询简介:http://blog.csdn.net/leaf_130/article/details/539329 ...

  7. Hibernate的hql语句save,update方法不执行

    Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置

  8. Hibernate学习---第九节:Hibernate之hql

    一.Hql 入门 1.实体类: package learn.hibernate.bean; import java.util.Date; import java.util.HashSet; impor ...

  9. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  10. Hibernate之HQL查询的一些例子

    Hibernate配备了一种非常强大的查询语言,就是HQL(hibernate query language),HQL看上去很像sql,但只是语法结构上相似,HQL是一种面向对象的查询,他可以理解继承 ...

随机推荐

  1. 基于selenium爬取拉勾网职位信息

    1.selenium Selenium 本是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖 ...

  2. 【笔记】linux x86漏洞利用

    0x1任意代码执行是如何实现的? 任意代码执行使用一种叫“覆盖返回地址”的技术来实现.这种方式使得攻击者重写位于栈上的返回地址,这将导致任意代码执行.

  3. 让你的 CDN 费用省 50% 以上!图片瘦身的正确姿势

    七牛云新推出的图片瘦身功能是做什么的? 打开七牛云的「数据处理」中的「图片瘦身」功能,在图片受到访问时,能够实时对图片进行瘦身,在保证分辨率和画质不变的情况下,可以将图片最高缩小 80%.当「图片瘦身 ...

  4. poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串

    两道题目意思差不多 第一题是10进制 , 第二题是2进制的 都是利用欧拉回路的fleury算法来解决 因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中 ...

  5. 解决Genymotion运行Android 5.0一直卡在开机界面

    在一些机器,启动genymotion 的android5.0版模拟器时,会卡在启动界面,一直启动不了. 这是因为要求的开启虚拟选项没有打开,在第一次启动时,会有提示,但可能大家没有注意(我也没注意到, ...

  6. SpringBoot Beans定义 连接池

    SpringBoot Beans定义 原有Spring框架,定义Bean方法如下 xml配置 组件扫描.@Controller.@Service... 原有Spring框架,参数注入方法如下 常用的参 ...

  7. 银河英雄传说(codevs 1540)

    题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米 ...

  8. Pytho操作MySQL

    一.相关代码 数据库配置类 MysqlDBConn.py 01 #encoding=utf-8 02 ''' 03 Created on 2012-11-12 04    05 @author: St ...

  9. oc温习三:常用函数

    参考文章: 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = rand()P; //0-49之间的随 ...

  10. Spring中基于AOP的@AspectJ

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/aspectj-based-aop-with- ...