HQL多表查詢
------------------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多表查詢