Hibernate-04 框架第四天 多表查詢的演示
阿新 • • 發佈:2018-12-09
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(); } }