1. 程式人生 > >七. Hibernate的高階查詢

七. 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