七. Hibernate的高级查询

1.HQL 关联查询的类型

HQL支持SQL的所有关联类型

1.内关联(*)

2.外关联

3.交叉关联

2.HQL内关联查询

内关联查询只能查询满足关联条件的对象的集合。

SQL语法:

select a.xxx, b.xxx from A a inner join B b on a.fk=b.pk

数据库表关联依靠FK.

案例:

– 查询每个员工的姓名和部门的名称

select a.empname,b.deptname from OA_employee a inner join oa_department b on a.deptno=b.deptno

HQL语法

(1)返回指定属性的内关联

select a.xxx, b.xxxx from A a inner join a.b b

(2)返回关联对象的内关联

from A a inner join a.b b

案例:

– 查询每个员工的姓名和部门的名称

select em.name, dm.name from EmployeeModel em inner join em.department dm

Hibernate Model类间关联依靠属性。

3.HQL内关联抓取查询

为了能查询一个对象时,将其关联的对象也要立即检索出来,HQL提供了抓取内关联查询。

语法:

from A a inner join fetch a.b b

返回的是A对象的集合

4.HQL外关联查询

1.左外关联查询

HQL语法:

from A a left outer join a.b b

2.右外关联查询

from A a right outer join a.b b

3.全外关联查询(MySQL不支持)

from A a full outer join a.b b

5.HQL分类汇总查询

1.分类汇总语句

(1) group by 子句

功能:确定分类的属性

语法:group by 属性,属性,。。。

select em.department.name, avg(em.salary) from EmployeeModel em group by em.department.name

(2) having子句

功能:对分类汇总后的结果进行筛选

语法:having 逻辑表达式

案例:

取得部门平均工资大于3000的部门的汇总工资
(部门名,汇总工资)

select em.department.name, sum(em.salary)
from EmployeeModel em
group by em.department.name
having em.department.name='财务部'
and avg(em.salary) >3000

2.分类汇总函数

(1) count()

(2) min()

(3) max()

(4) avg()

(5) sum()

6.HQL select语句

1.功能:指定返回的对象的属性。

省略则返回对象。

2.语法:

select 属性,属性,…

3.案例:

返回员工对象的集合 List

from EmployeeModel

返回姓名的集合:List

select em.name from EmployeeModel em

返回年龄的集合:List

select em.age from EmployeeModel em

返回工资的集合:List

select em.salary from EmployeeModel em

返回姓名和年度对的集合:List<Object[]>

select em.name,em.age from EmployeeModel em

返回员工对象和部门对象对的集合:List<Object[]>

from EmployeeModel em inner join em.department dm

返回员工对象的集合 List

select em from EmployeeModel em inner join em.department dm

返回员工对象的集合 List

from EmployeeModel em inner join fetch em.department dm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章