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