1. 程式人生 > >Hibernate-04 框架第四天 多表查詢的演示

Hibernate-04 框架第四天 多表查詢的演示

package test;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import domain.Customer;
import utils.HibernateUtils;

public class Demo4 {
	
	
	/*
	 * 使用HQL顯示內連線
	 * 注意語句中使用的都是物件的名字不是表名
	 * HQL的多表查詢有 迫切與非迫切之分,可以參考以下程式碼,一般都用迫切因為可以將資料封裝到bean中,
	 	*非迫切則只是Object[]陣列
	 * mysql多表查詢的定義參考,圖文並茂很詳細有時間可以仔細看看連結如下
	 * https://www.cnblogs.com/bypp/p/8618382.html
	 */
	
	
	@Test
	public void run3() {
		/*
		 * 左外連結迫切返回結果,返回型別為HQL中的型別
		 * 使用方法是將inner關鍵字替換為left
		 */
		//獲得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c left join fetch c.linkmans";
		List<Customer> list = session.createQuery(hql).list();
		Set<Customer> set = new HashSet<>(list);
		
		for (Customer customer : set) {
			System.out.println(customer);
		}
		
		tr.commit();
		
	}
	
	
	
	@Test
	public void run2() {
		/*
		 *  內連線迫切返回結果,返回型別為HQL中的型別
		 * 使用方法是在join 關鍵字後面加上fetch
		 * 排重可以用hashset的建構函式傳入list即可。
		 */
		//獲得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c inner join fetch c.linkmans";
		List<Customer> list = session.createQuery(hql).list();
		Set<Customer> set = new HashSet<>(list);
		
		for (Customer customer : set) {
			System.out.println(customer);
		}
		
		tr.commit();
		
	}
	
	
	@Test
	public void run1() {
		/*
		 * 內連線非迫切返回結果,返回型別為Object[]
		 */
		//獲得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c inner join c.linkmans";
		
		List<Object[]> list = session.createQuery(hql).list();
//		Set<Object[]> set = new HashSet<>(list);
		
		for (Object[] object : list) {
			System.out.println(Arrays.toString(object));
		}
		
		tr.commit();
		
	}

}