天天看點

hibernate學習筆記第四天(3)HQL多表查詢

此文章為自己書寫,在Word上做的筆記,然後拷貝到這上邊的,無任何抄襲。另外若是程式有任何問題可以評論,也可私信我。

HQL多表查詢

mysql的多表查詢

1.内連接配接

hibernate學習筆記第四天(3)HQL多表查詢

内連接配接查詢的是兩個表有關聯的資料。

2.左外連接配接

hibernate學習筆記第四天(3)HQL多表查詢

代表查詢的結果是左邊的資料都存在,而右邊的資料依據左邊存在而顯示。

3.右外連接配接

hibernate學習筆記第四天(3)HQL多表查詢

代表查詢的結果是右邊的資料都存在,而左邊的資料依據右邊存在而顯示。

HQL實作多表查詢

内連接配接

内連接配接查詢hql語句寫法:以客戶與聯系人為例

(1)from Customer c inner join c.linkmans

hibernate學習筆記第四天(3)HQL多表查詢

傳回的是list,list的每部分都是數組的形式

左外連接配接

1左外連接配接的hql語句的寫法

(1)from Customer c left outer join c.linkmans

hibernate學習筆記第四天(3)HQL多表查詢

右外連接配接

1右外連接配接的hql語句的寫法

(1)from Customer c right outer join c.linkmans

hibernate學習筆記第四天(3)HQL多表查詢

迫切内連接配接

(1)迫切内連接配接和内連接配接底層實作是一樣的

(2)差別:使用内連接配接傳回的list中每部分是數組,迫切内連接配接傳回的list的每部分都是對象的形式

(3)hql語句寫法:

from Customer c inner join fetch c.linkmans

迫切左外連接配接

1迫切左外連接配接的hql語句的寫法

(1)from Customer c left outer join fetch c.linkmans

hibernate學習筆記第四天(3)HQL多表查詢

2兩者的聯系與差別與内連接配接和迫切内連接配接相似

Hibernate檢索政策

檢索政策的概念

1.hibernate檢索政策分為兩類:

(1)立即檢索(查詢),根據id進行查詢,調用get方法,一調用get方法就馬上發送語句進行查詢資料庫

hibernate學習筆記第四天(3)HQL多表查詢

(2)延遲檢索(查詢),根據id進行查詢,還有load方法,調用load方法不會馬上去查詢資料庫,隻有得到對象裡邊的除了id以外的值的時候才會發送語句查詢資料庫

hibernate學習筆記第四天(3)HQL多表查詢

2.延遲查詢分成兩類

(1)類級别的延遲:根據id查詢傳回實體類的對象,調用load方法不會馬上發送語句

(2)關聯級别的延遲:

查詢出某個客戶,再查詢出這個客戶的所有聯系人,查詢客戶所有聯系人的過程是否需要延遲,這個過程就稱為關聯級别的延遲

hibernate學習筆記第四天(3)HQL多表查詢

關聯級别延遲操作

1.在映射檔案中進行配置來實作

(1)根據客戶得到相關所有的聯系人,在客戶映射檔案中進行配置

2.在set标簽上使用屬性

(1)fetch:預設值select

(2)lazy:預設值true

true:延遲

false:不延遲

extra:極其延遲

hibernate學習筆記第四天(3)HQL多表查詢
hibernate學習筆記第四天(3)HQL多表查詢

執行get方法時也延遲查詢,隻發送了一條sql語句。

hibernate學習筆記第四天(3)HQL多表查詢
hibernate學習筆記第四天(3)HQL多表查詢

調用get方法之後發送了兩條sql語句。

hibernate學習筆記第四天(3)HQL多表查詢
hibernate學習筆記第四天(3)HQL多表查詢

調用size方法時才隻發送一條sql語句,而且隻發送顯示數量的語句。

批量查詢

1.查詢所有的客戶,傳回list集合,周遊list集合,得到每個客戶,進而得到每個客戶的所有聯系人

hibernate學習筆記第四天(3)HQL多表查詢

(1)上面的操作代碼,能實作功能,但是需要發送多條sql語句

2.在客戶的映射檔案中,set标簽配置

(1)配置batch-size屬性,值越大則效率越高

hibernate學習筆記第四天(3)HQL多表查詢

繼續閱讀