zoukankan      html  css  js  c++  java
  • 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();
                }
            }
  • 相关阅读:
    Mybatis-Plus select不列出全部字段
    git合并之 merge和rebase
    git
    springboot缓存开发
    关于Maven打包
    邮件发送模型及其Python应用实例
    Python 日志模块的定制
    python 解析 XML文件
    有限状态机FSM详解及其实现
    动态规划
  • 原文地址:https://www.cnblogs.com/jack1995/p/6953110.html
Copyright © 2011-2022 走看看