zoukankan      html  css  js  c++  java
  • hibernate-HQL连接查询

    和SQL查询一样,HQL也支持各种各样的连接查询, 如内连接、外连接。

    实例:

    package Test;
    
    import static org.junit.Assert.*;
    
    import java.util.List;
    
    import org.hibernate.Session;
    import org.junit.Test;
    
    import entity.Dept;
    import entity.Emp;
    
    import util.HibernateSessionFactory;
    
    public class HqlTest {
    
        /**
         * 使用内连接查询部门和员工的信息。inner join,查出的是2个实体对象的列表,所以是object[]对象数组
         */
        @Test
        public void test1() {
            Session session=HibernateSessionFactory.getSession();
            try {
                List<Object[]> list = session.createQuery("from Dept d join d.emps").list();
                for (Object[] objects : list) {
                    Dept dept=(Dept) objects[0];
                    Emp emp = (Emp) objects[1];
                    System.out.println(emp.getEname()+"	"+dept.getDname());
                    System.out.println("查询成功!");
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("查询失败!");
            }finally{
                session.close();
            }
        }
    
        /*使用隐式内连接按部门条件查询员工信息,查询的是Emp对象,所以返回是Emp类型的集合*/
        @Test
        public void test2() {
            Session session=HibernateSessionFactory.getSession();
            try {
                List<Emp> list = session.createQuery("from Emp e where e.dept.dname='SALES'").list();
                for (Emp emp : list) {
                    System.out.println(emp.getEname()+"	"+emp.getDept().getDname());
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("查询成功!");
            }finally{
                session.close();
            }
        }
    
        /**
         * select子句中使用隐式内连接按部门条件查询员工信息。
         */
        @Test
        public void test3() {
            Session session=HibernateSessionFactory.getSession();
            try {
            List<Object[]> list = session.createQuery("select e.dept.dname,e.ename from Emp e where e.dept.dname='SALES'").list();
            for (Object[] objects : list) {
                
                System.out.println(objects[0]+"~~~~"+objects[1]);
            }
            System.out.println("查询成功!");
            } catch (Exception e) {
                e.printStackTrace();    
            }finally{
                session.close();
            }
        }
        
        /**
         * 使用迫切内连接查询部门和员工的信息。
         */
        @Test
        public void test4() {
            Session session=HibernateSessionFactory.getSession();
            try {
            List<Dept> list = session.createQuery("select distinct d from Dept d inner join fetch d.emps").list();
            for (Dept dept : list) {
                System.out.println(dept.getDname()+"	"+dept.getEmps());
            }
            
            System.out.println("查询成功!");
            } catch (Exception e) {
                e.printStackTrace();    
            }finally{
                session.close();
            }
        }
        /**
         * 使用迫切左外连接查询部门和员工的信息。
         */
        @Test
        public void test5() {
            Session session=HibernateSessionFactory.getSession();
            try {
            List<Dept> list = session.createQuery("select distinct d from Dept d left join fetch d.emps").list();
            for (Dept dept : list) {
                System.out.println(dept.getDname()+"	"+dept.getEmps());
            }
            
            System.out.println("查询成功!");
            } catch (Exception e) {
                e.printStackTrace();    
            }finally{
                session.close();
            }
        }
        
        /**
         * 使用交叉连接查询部门和员工的信息。
         */
        @Test
        public void test6() {
            Session session=HibernateSessionFactory.getSession();
            try {
            List<Object[]> list = session.createQuery("from Dept d,Emp e where d.deptno=e.dept.deptno").list();
            for (Object[] objects : list) {
                Dept dept=(Dept) objects[0];
                Emp emp=(Emp) objects[1];
                System.out.println(emp.getEname()+"	"+dept.getDname());
            }
            
            System.out.println("查询成功!");
            } catch (Exception e) {
                e.printStackTrace();    
            }finally{
                session.close();
            }
        }
    }
  • 相关阅读:
    MongoDB 常用的基础命令
    window.crypto 生成随机数
    正则去除object中key的引号
    git 常用操作命令
    常用的用于操作 css 的方法
    angular ViewChild ContentChild 系列的查询参数
    angular 键盘事件绑定与过滤
    mysql性能优化(A)
    移动硬盘写保护处理
    expdp/impdp导入导出
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6036184.html
Copyright © 2011-2022 走看看