HQL语句

来源:互联网 发布:sql select 创建表 编辑:程序博客网 时间:2024/05/14 06:22

HQL查询

HQL是Hibernate Query Language的缩写,HQL的语法很像SQL的语法,但是HQL是一种面向对象的查询语言。

因此,SQL的操作对象的数据表和列等数据对象,而HQL的操作对象是类、实例、属性等。

HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。

HQL查询依赖Query类,每个Query实例对应一个查询对象。

1、通常,set xxx()方法的返回值都是void,但是hibernate  Query的set XXX()方法的返回值是Query本书,

因此,程序通过Session创建Query后,直接多次调用set XXX()方法为HQL语句的参数赋值,再直接调用list()

方法返回查询后的全部结果即可。

Query还包含两个方法:

setFirstResult(int    firstResult),设置返回的结果集从第几条记录开始

setMaxResult(int   maxResult),设置本次查询返回的结果数。

这两个方法用于实现Hibernate分页。

2、HQL查询的聚集函数

avg —— 计算属性的平均值

count —— 统计选择对象的数量

max —— 统计属性值的最大值

min —— 统计属性值的最小值

sum —— 计算属性值的总和。

Example:

 select count (*) from  Person  查询Person类中实例的个数

select max (p.age) from Person  as p  查询Person类中年龄的最大值

3、HQL查询的where子句

where子句用于筛选选中的结果,缩小选择的范围。如果没有为持久化实例命名别名,

可以直接使用属性名引用。

如: from  Person where name like ' tom% ' 等同于 from  Person as p where p.name like " tom% "

返回name属性以tom开头的实例。

4、表达式

HQL的功能非常丰富,where子句后支持的运算符异常丰富,不近包括SQL的运算符,还包括EJB-QL的运算符

where子句中允许使用大部分SQL支持的表达式:

数学运算符: +、-、*、/等

二进制比较运算符:=、 >=、 <=、 <>、!=、like等

逻辑运算符:and、or 、not等

in、not  in 、  between 、 is null 、  is  not  null 、  is empty  、  member of 和not   member  of等。

简单的case、 case....when..then...else...end和case、case  when.....then....else....end等

字符串连接符value1 || value2 或使用字符串连接函数  concat(value1,value2)。

时间操作函数 current_date()、 current_time()、current_timestamp()、second()、minute()、hour()、

day()、month()、year()等。

HQL还支持EJB_QL3.0所支持的函数或操作substring()、trim()、lower()、upper()、length()、

locate()、abs()、sqrt()、bit_length()、coalesce()和nullif()等

Example:

in 与 between....and的用法:

from Person p where p.name between ' A 'and '  B  '

from Person p where p.name in (”abc“,"tom","joan")

5、 order  by  子句

查询返回的列表(list)可以根据类或组件属性的任何属性值进行排序。

Example:

from Person as p  order by p.name,p.age 根据人的名字和年龄升序排列

from Person as p order by p . age desc    根据人的年龄倒序排列

默认情况下是升序即asc,用desc则是倒序排列。

原创粉丝点击