七. Hibernate的高階查詢
阿新 • • 發佈:2018-11-13
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