通过对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. python基础知识06-函数基础和函数参数

    函数基础和函数参数 可迭代对象:序列类型 range . 1.函数的定义 def 函数名(参数): pass return 表达式 ,不能是赋值语句.不写默认返回None.用逗号隔开返回一个元组. 函 ...

  2. logging ,re 模块

    一,复习 # random: random() randint() choice() sample() # 序列化:对象需要持久化存储或传送 对象 => 字符串 # json: 用于传输 # - ...

  3. cs229_part1

    开篇题 这个系列的文章主要参考cs229课程的内容,按照自己的思路和其他课程与书籍方式梳理下来,可能顺序和内容都与cs229有点不一样,但是参考内容我都会附在最后.而且这个系列主要讲个人的理解不想太多 ...

  4. 理解js的几个关键问题(2): 对象、 prototype、this等

    参考文档:http://www.cnblogs.com/ranran/archive/2014/05/19/3737217.html http://speakingjs.com/es5/ch17.ht ...

  5. jenkins在linux环境搭建需要用到的linux命令

    需要用到的linux命令如下: 服务器jdk1.7/usr/java/jdk1.7.0_80 jdk1.8/home/hujb/javaJDK/jdk1.8.0_171保存文件时用 : w ! sud ...

  6. python014 Python3 迭代器与生成器

    Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结 ...

  7. python010 Python3 元组

    Python3 元组Python 的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可.如下实例: tup1 = ...

  8. LeetCode:不同路径&不同路径II

    不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问 ...

  9. @JoinColumn 匹配关联多个字段

    两张表结构如下 TABLE_A: ID, COLA1, COLA2 TABLE_B: ID, A_ID, COLB1, COLB2 A和B是一对多的关系. 我在B的BEAN上面,通过Anotation ...

  10. Java多线程干货系列—(四)volatile关键字

    原文地址:http://tengj.top/2016/05/06/threadvolatile4/ <h1 id="前言"><a href="#前言&q ...