日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate关联查询

發(fā)布時(shí)間:2025/6/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate关联查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  本文由廣州瘋狂軟件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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。