1. 程式人生 > >HQL多表查詢

HQL多表查詢

1.0 數組 sys 調用 分享 outer http 語句 得到

------------------siwuxie095

HQL 多表查詢

以客戶和聯系人為例(一對多)

1內連接

1)hql 語句寫法

from Customer c inner join c.linkManSet

2)具體實現

技術分享

技術分享

技術分享

/*

* (1) 創建 Query 對象

*

* 調用 session createQuery() 方法,參數是 hql

* 語句,返回值是 Query

類型,創建以接收

*/

Query query=session.createQuery("from Customer c inner join c.linkManSet");

/*

* (2) 調用方法得到結果

*

* 調用 query list() 方法,返回值是 List 類型,

* 創建以接收

*

* 註意:此時返回的 List 的每部分都是一個數組,而

* 不是 Customer 對象 LinkMan 對象,所以指定泛

* 型為 Object[]

*/

List<Object[]> list=query.list();

for (Object[] obj : list) {

Customer customer=(Customer) obj[0];

LinkMan linkMan=(LinkMan) obj[1];

System.out.println(customer.getCustName()+"-"+linkMan.getLkmName());

}

3)返回的 List 中,每部分都是一個數組

2迫切內連接

1)迫切內連接 和 內連接 的底層實現(即 sql 語句)都一樣

2)區別:

1內連接返回的 List 中,每部分都是一個數組

2迫切內連接返回的 List 中,每部分都是一個對象

3)hql 語句寫法

from Customer c inner join fetch c.linkManSet

4)具體實現

技術分享

技術分享

技術分享

/*

* (1) 創建 Query 對象

*

* 調用 session createQuery() 方法,參數是 hql

* 語句,返回值是 Query 類型,創建以接收

*/

Query query=session.createQuery("from Customer c inner join fetch c.linkManSet");

/*

* (2) 調用方法得到結果

*

* 調用 query list() 方法,返回值是 List 類型,

* 創建以接收

*

* 註意:此時返回的 List 的每部分都是一個 Customer

* 對象

*/

List<Customer> list=query.list();

for (Customer cust : list) {

System.out.println(cust.getCustName()+"-"+cust.getLinkManSet().size());

}

3左外連接

1)hql 語句寫法

from Customer c left outer join c.linkManSet

2)左外連接返回的 List 中,每部分都是一個數組

4迫切左外連接

1)hql 語句寫法

from Customer c left outer join fetch c.linkManSet

2)迫切左外連接返回的 List 中,每部分都是一個對象

5右外連接

1)hql 語句

from Customer c right outer join c.linkManSet

2)右外連接返回的 List 中,每部分都是一個數組

「註意:沒有迫切右外連接

【made by siwuxie095】

HQL多表查詢