1、內連接和迫切內連接
(1)內連接
HQL語句:from 實體類名 實體類別名 inner join 實體類別名.表示另一個表數據的集合名稱
(2)迫切內連接
HQL語句:from 實體類名 實體類別名 inner join fetch 實體類別名.表示另一個表數據的集合名稱
(3)區別:內連接返回的數據以數組的方式封裝,迫切內連接返回的數據以對象的方式封裝。
(4)代碼:
內連接代碼:
// 使用HQL內連接查詢 @Test public void test1() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1、創建Query對象,寫hql語句 Query query = session.createQuery("from Sort s inner join s.setGoods"); //調用list方法得到數據 List<Object> objects =query.list(); //遍歷list得到數組 for (Object object : objects) { Object[] objects2 = (Object[]) object; System.out.println(Arrays.toString(objects2)); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
迫切內連接代碼:
// 使用HQL迫切內連接查詢 @Test public void test2() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、創建Query對象,寫hql語句 Query query = session .createQuery("from Sort s inner join fetch s.setGoods"); // 調用list方法得到數據 List<Object> objects = query.list(); // 遍歷list得到數組 for (Object object : objects) { System.out.println(object); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
2、左外連接和迫切左外連接
(1)左外連接
HQL語句:from 實體類名 實體類別名 left outer join 實體類別名.表示另一個表數據的集合名稱
(2)迫切左外連接
HQL語句:from 實體類名 實體類別名 left outer join fetch 實體類別名.表示另一個表數據的集合名稱
(3)區別:左外連接返回的數據以數組的方式封裝,迫切左外連接返回的數據以對象的方式封裝。
(4)代碼:
左外連接代碼:
// 使用HQL左外連接查詢 @Test public void test3() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、創建Query對象,寫hql語句 Query query = session .createQuery("from Sort s left outer join s.setGoods"); // 調用list方法得到數據 List<Object> objects = query.list(); // 遍歷list得到數組 //調用list方法得到數據 //遍歷list得到數組 for (Object object : objects) { Object[] objects2 = (Object[]) object; System.out.println(Arrays.toString(objects2)); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
迫切左外連接代碼:
// 使用HQL迫切左外連接查詢 @Test public void test4() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、創建Query對象,寫hql語句 Query query = session .createQuery("from Sort s left outer join fetch s.setGoods"); // 調用list方法得到數據 List<Object> objects = query.list(); for (Object object : objects) { System.out.println(object); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
3、右外連接
HQL語句:from 實體類名 實體類別名 right outer join 實體類別名.表示另一個表數據的集合名稱
代碼:
// 使用HQL右外連接查詢 @Test public void test5() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、創建Query對象,寫hql語句 Query query = session .createQuery("from Sort s right outer join s.setGoods"); // 調用list方法得到數據 List<Object> objects = query.list(); for (Object object : objects) { Object[] objects2 = (Object[]) object; System.out.println(Arrays.toString(objects2)); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }