七. Hibernate的高级查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LY121600HACKER/article/details/83990936

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)返回指定属性的内关联

扫描二维码关注公众号,回复: 4047476 查看本文章
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

猜你喜欢

转载自blog.csdn.net/LY121600HACKER/article/details/83990936