hibernate进阶-- HQL基础

HQL(hibernate query language)hibernate查询语言,是在hibernate框架中使用的查询语言,与数据库查询语言SQL不同之处 在于HQL是面向对象的语言,查询的是数据库中表所对应的实体对象及对象的属性。HQL语句由以下几种子句组成:select。。+from。。+where。。+group by。。+having。。+order。。其中最简单的HQL语句可以只有一个from子句构成。从HQL语句组成形式可以清楚的看出其与SQL语句还是十分相似的,但本质上是不同的。

–HQL 查询语句是面向对象的, Hibernate 负责解析 HQL查询语句, 然后根据对象-关系映射文件中的映射信息,把HQL查询语句 翻译成相应的 SQL语句.HQL 查询语句中的主体是 域模型中的类及类的属性
–SQL 查询语句是与关系数据库绑定在一起的.SQL 查询语句中的主体是数据库表及表的字段.

HQL需要注意:

  1. HQL是面向对象的语言,对Java类与属性大小写敏感。
  2. HQL对关键字大小写不敏感。
学习HQL首先需要了解hibernate中的查询接口:Query接口--支持方法链编程

Query实例对象的获得:通过session.createQuery()方法获得Query对象,需要传入的参数就是hql字符串变量。
Query对象可以通过list函数返回所查询的实体类对象及其属性信息。
 
Hibernate 支持参数绑定机制,它依赖于JDBC API 中的 PreparedStatement的预定义SQL语句功能.
HQL 的参数绑定由两种形式:
按参数名字绑定: 在HQL查询语句中定义命名参数,命名参数以“:” 开头.
按参数位置绑定: 在HQL查询语句中用“?” 来定义参数位置
 相关方法:
setEntity(): 把参数与一个持久化类绑定
setParameter():绑定任意类型的参数.该方法的第三个参数显式指定Hibernate映射类型
本文主要通过Query的list()函数介绍HQL语句的编写,相关的其他API包括分页查询,QBC等在后续学习。
  1. from子句:是每个hql语句所必须的,通过它来锁定所要查询的数据表范围,默认会返回所有的实体类及其属性。
  2. select子句:可以缩小查询范围,包括查询的实体类或者属性,一般用list接口返回的是对象数组的集合,也可以选择返回list、map、自定义类型的集合等(select new List(name,address,tel) from ...、select new Map(name,address,tel) from ...、select new User(name,address,tel) from ...其中User要有相应的构造器)。同时在返回的属性中包含同名不同类的属性时可以使用别名的方式加以区分。
  3. where子句:是一个条件语句,返回结果需要通过where子句的条件筛选,在where子句中支持比较运算、(非)空运算、范围条件、逻辑运算、集合运算、四则运算以及模糊查询等条件运算。模糊查询中的匹配符号:%--匹配任意字符、_--匹配任意一个字符。
  4. order by子句:可以实现对查询结果的排序,支持多个关键字的排序,之间用逗号隔开即可。

综上可以看出hql与SQL在查询语句的拼写方面还是十分类似的,主要是因为hibernate本身就是基于jdbc来实现的,而且hql的执行过程也是首先由hibernate框架将hql语句解析、映射成SQL来进行数据库操作的。主要的不同点在于hql是面向对象的语言,当然Query的API还有很多,后续我会继续学习总结。



猜你喜欢

转载自blog.csdn.net/weiguang111/article/details/50569867