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();
}
}