Hibernate关联查询
本文由廣州瘋狂軟件java培訓分享:
很多人認為hibernate一旦涉及到多張表查詢就很不方便,只能通過原聲sql解決,其實不然,hql語句其實已經比較強大了,基本涵蓋了sql的60%的功能。我認為用原生sql的場景應該為以下幾點情況:
1. 非常復雜sql(嵌套、臨時表、混合語句【update包含select嵌套】)
2. 某數據庫(如oracle)特性函數
3. 特殊業務sql,即查詢出的結果是某種特殊業務含義,并不是po實體類里的字段。例如:select col_1 as business1 , col_2 as business2 from table;(business1并不是table的字段)
除以上特殊需求外,我建議能用hq就用hql,hql最大的優點,除了能自動映射成po實體類,另一個就是跨數據庫的通用性,采用hql語句可以輕松將數據庫由mysql改為oracle。
hql的基礎我就不再敘述了,今天我為大家主要介紹多表之間的關聯查詢。
1. po之間含有關聯關系
[java] view plaincopy public class Student {
...
private Clazz clazz;
get()...
set()...
}
from Student t inner join t.clazz r where t.sex = '男' and r.name = '三班'
這個語句默認情況下,是懶加載的,如果想一并抓取,則語句為:
from Student t inner join fetch t.clazz r where t.sex = '男' and r.name = '三班'
hql同樣支持left join和right join等關聯查詢
2. po之間沒有關聯關系
[java] view plaincopy public class Student {
...
private String clazzId;
get()...
set()...
}
select t from Studnent t, Clazz r where t.clazzId = r.id and t.sex = '男' and r.name = '三班'
3. 查詢部分字段
另外有時我們只需要查詢po對象里的部分字段,那么怎么查呢?
select new Student(name, sex) from Student
但需要注意的是,Student實體類中必須要有參數為name,sex的構造函數。
4. 統計函數
支持count()、min()、max()、sum()、avg()等
select avg(s.age) from Student as s
5. 去除重復行
select distinct s.age from Student as s
6. 綜合用法
舉一個典型的例子:分頁。用hibernate分頁,現在大多數人還是采用兩步去做,第一步統計行數,第二步分頁查詢(目的是計算出總頁數),如果想一步完成,多數人還是用sql了,其實hql也能做到。
select new Student(t.name, t.sex, count(t)) from Sudent t
在Student實體類中只要有參數為name, sex, rowCount的構造函數即可,rowCount也可以不是數據庫里的字段
通過以上可以看出,某一技術我們有時覺得不方便,只是我們還不夠了解它,需要我們更多的仔細去探索和挖掘。
瘋狂軟件教育中心依托開發團隊的強大技術實力,把企業最新技術融入實訓課程,打造金牌的品質,才能給予學員黃金的未來,瘋狂軟件憑借過硬的技術實力與豐富的項目開發經驗,贏得了社會的肯定。瘋狂軟件Java培訓師資力量強大,課程內容深入,為學員高薪就業做了很好的鋪墊,擁有豐富就業指導經驗的就業團隊也成為了學員高薪就業的先天優勢。地址:廣州天河區車陂灃宏大廈3樓。
轉載于:https://www.cnblogs.com/gojava/p/3602036.html
總結
以上是生活随笔為你收集整理的Hibernate关联查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32_CAN总线知识
- 下一篇: 2014/3/16 长沙多校(第三次)