Hibernate Query Language(HQL)提供了十分强大的功能,但是HQL是针对持久化对象,用来取得对象,而不是进行update、delete和insert等操作。而且HQL是完全面向对象的,具备继承、多态和关联等特性。
1、from子句
from 子句是最简单的HQL语句,例如:from Stuinfo,也可以写成select s from Stuinfo s,结果返回Stuinfo类的所有实例。
2、select子句
有时候并不需要得到对象的所有属性,这时就可以使用select子句进行属性查询,例如:select s.name from Stuinfo s。
如果要查询两个以上的属性,查询结果会以数组的方式返回,如下所示:
Query query=session.createQuery("select s.name,s.sex from Stuinfo as s");
List list=query.list();
for(int i=0;i<list.size();i++){
Object obj[]=(Object[])list.get(i);
System.out.println(obj[0]+"的性别是:"+obj[1]);
3、统计函数查询
经常使用的函数如下所示:
- count():统计记录条数
- min():求最小值。
- max():求最大值。
- sum():求和。
- avg():求平均值。
例如要取得Stuinfo实例的数量,HQL如下所示:
select count(*) from Stuinfo
取得平均年龄的HQL如下:
select avg(s.age) from Stuinfo as s
可以使用distinct去除重复数据
select distinct s.age from Stuinfo as s
4、where子句
HQL通过where子句实现子查询。例如返回所有名字为zzf的Stuinfo实例:
from Stuinfo as s where s.name='zzf'
where子句中允许出现的表达式包括了SQL中可以使用的大多数表达式:
(1)、数学操作:+、-、*、/。
(2)、关系比较操作:=、>=、<=、!=、like。
(3)、逻辑操作:and、or、not。
(4)、字符串连接:||
(5)、SQL标量函数:例如upper()和lower()。