码迷,mamicode.com
首页 > 其他好文 > 详细

HQL查询

时间:2016-06-11 13:09:07      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

        //HQL查询
        // auto-import要设置true,如果是false,写HQL时要指定类的全名
        //查询全部列
        Query query = session.createQuery("from Dept");
        System.out.println(query.list());

        //查询指定列
        Query query = session.createQuery("select d.depId,d.depName from Dept d");
        System.out.println(query.list());

        //查询指定列,并封装为对象,必须提供带参数的构造器
        Query query = session.createQuery("select new Dept(d.depId,d.depName) from Dept d");
        System.out.println(query.list());

        //条件查询 一个条件、多个条件、and or between 模糊查询
        Query query = session.createQuery("from Dept d where depName=?");
        query.setString(0,"人事部");
        query.setParameter(0,"人事部");
        //条件查询,命名参数
        Query query = session.createQuery("from Dept d where depId =:myid and depName=:name");
        query.setParameter("myid",1);
        query.setParameter("name","人事部");
        //条件查询,between and查询
        Query query = session.createQuery("from Dept d where depId between ? and ?");
        query.setParameter(0,1);
        query.setParameter(1,5);
        //模糊查询
        Query query = session.createQuery("from Dept d where depName like ?");
        query.setParameter(0,"%部%");
        System.out.println(query.list());

        //集合函数统计,不支持count(1),uniqueResult()返回结果的第一行第一列中的值
        Query query = session.createQuery("select count(*) from Dept");
        System.out.println(query.uniqueResult());

        //分组查询,查询employ表,统计每个部门的人数
        Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");
        //统计部门人数大于1的部门
        Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept having count(*) >1");
        System.out.println(query.list());

        //连接查询,内连接、左外连接、右外连接
        //内连接,映射已经配置好了关系,关联的时候直接写对象的属性即可
        //返回员工和部门组成的对象数组,写在前面的元素在结果集中也在前面
//        SELECT e.empName, e.salary, d.deptName FROM t_employee e INNER JOIN t_dept d ON d.depId = e.dept_id
        Query query = session.createQuery("select e.empName,e.salary,e.dept.depName from Employee e inner join e.dept");
        List<Object[]> list = query.list();
        for(int i=0;i<list.size();i++){
            Object[] obj = list.get(i);
            Employee employee = (Employee) obj[0];
            Dept dept = (Dept) obj[1];
            System.out.println(employee);
            System.out.println(dept);
        }
        System.out.println(query.list());
        //左外连接
//        SELECT e.empName, e.salary, d.deptName FROM t_employee e LEFT JOIN t_dept d ON d.depId = e.dept_id
        Query query = session.createQuery(" from Employee e left join e.dept");
        List<Object[]> list = query.list();
        for(int i=0;i<list.size();i++){
            Object[] obj = list.get(i);
            Employee employee = (Employee) obj[0];
            Dept dept = (Dept) obj[1];
            System.out.println(employee);
            System.out.println(dept);
        }//迫切内连接,将右表的对象填充到左表当中
        Query query = session.createQuery("from Dept d inner join fetch d.emps");

将HQL查询语句放到映射文件中:

    <query name="getDept">
        from Dept d where depName=?
    </query>
    <query name="getDept2">
        <![CDATA[
            from Dept d where depId < ?
        ]]>
    </query>

使用查询语句

        Query query = session.getNamedQuery("getDept");
        query.setParameter(0,"人事部");
Query query
= session.getNamedQuery("getDept2"); query.setParameter(0, 4); System.out.println(query.list());

 

HQL查询

标签:

原文地址:http://www.cnblogs.com/juaner767/p/5575097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!