Hibernate HQL多表查詢

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

複製代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章