HQL数据查询

HQL全称Hibernate Query Language 顾名思义就可以知道HQL的用途就是建立在Hibernate框架的基础上的查询语句;

HQL是面向对象的查询语句,HQL是映射配置的持久化类及其属性,而SQL则是数据库表;

HQL语句的形式;

select...from...where...group by...having...order by... 看上去形式跟SQL,所差无几,但重点在于红色字体的from字句,正是它使得HQL更加灵活简便;

使用HQL的注意细节:HQL是面向对象的查询语言,对关键字不区分大小写(一般小写),但是对Java类及其属性的大小写敏感的;

使用HQL要依靠Query接口:org.hibernate.Query接口;

1.Query接口定义有执行查询的方法;

2.Query接口支持方法链编程风格,使得程序代码更为简洁(使用最多的场景就是查询参数的动态设置,特别是多参数);


Query实例的创建:

1.Session的createQuery()方法创建;

2.createQuery方法包含一个HQL语句参数,createQuery(hql);

Query执行查询:

1.Query接口的list()方法执行HQL查询;

2.list()方法返回结果的数据类型为java.util.List,List集合中存放符合查询条件的持久化对象

from子句中持久化类的引用:

1.不需要引入持久化类的全限定名(package.className),而是直接引入类名(from className)即可查询,因为hql有auto-import

2.可为类名起别名from className (as) otherName ,这点跟sql是相类似的

查询结果返回形式

1.select子句中如果没有指定返回形式,则默认是list<Object[]>,Object[]数组的数据顺序为select所需数据的顺序(select多个元素时使用),如果只select一个元素,则返回list<Object>

2.可使用list作为返回结果,select中用new list指定,如:select new list(c.id,c.name) from Class c;

3.同理,也可使用map等,这个根据自己习惯而定

4.注意一点,也是很容易忽略的一点,如果是返回自定义类,那么自定义了构造器之后,一定还要再写一个无参构造器,这是因为当在其它地方也用到这个表时,hql是默认调用无参默认构造函数,如果没有,会运行出错

5.跟sql一样,也可使用distinct来去掉结果中重复的数据

6.query.uniqueResult()方法可以返回单个对象,而不再是List,返回对象后要进行强制类型转换

限制语句---where

1.因大部分限制的运算符都与SQL相同,所以这里只分析与SQL有差异的运算符

2.在HQL中是允许使用 = , < >(不等于语句的),如:where c.name = null 或where c.name <> null,Hibernate会将其转为 is null 或 is not null

3.HQL 允许使用is (not) empty ,与之对应的是SQL的(not) exists

4.HQL的member of对应SQL的in


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值