Hibernate之HQL总结

来源:互联网 发布:ios屏蔽广告软件 编辑:程序博客网 时间:2024/06/07 07:11

框架下载地址
百度云盘

Hibernate简介

Hibernate是一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate架构包括许多对象持久对象,会话工厂,事务工厂,连接工厂,会话,事务等

这里写图片描述
更多信息

HQL语言

HQL(Hibernate Query Language)是完全面向对象的查询语言。它提供了更加面向对象的封装,因此它支持继承、多态等特征。HQL基本语法如下:
注意这里查询的都是JAVA类对象select "对象.属性名"from "对象名"where "条件"group by "对象.属性名" having "分组条件"order by "对象.属性名"
  1. 实体对象查询

    • 查询所有信息

      Employee是一个实体类select * from Employee 等价于from Employee
    • 查询指定列名(投影查询)

      注意:Employee对象必须要有构造方法public Employee(String empname, String job)
      select new Employee (empname,job) from Employee

  2. 条件查询

    • 简单条件查询

      from Employee emp where emp.sex="男"
    • 分页查询
      Employee ee = new Employee();    // ee.setEmpname("杨%");     ee.setSalary(6000.0);    // ee.setJob("神雕大侠");    Session session = HibernateSessionFactory.getSession();    StringBuffer buffer = new StringBuffer("from Employee where 1=1");    //拼接HQL    if (ee.getEmpname() != null && ee.getEmpname().length() > 0) {        buffer.append(" and empname like :empname");    }    if (ee.getSalary() != null && ee.getSalary() > 0) {        buffer.append(" and salary> :salary");    }    if (ee.getJob() != null && ee.getJob().length() > 0) {        buffer.append(" and job= :job");    }    Query query=session.createQuery(buffer.toString());    query.setProperties(ee);    //设置分页    query.setFirstResult(0);    query.setMaxResults(5);    List<Emp> list=query.list();    for (Emp e : list) {        System.out.println(e.getEmpid() + "," + e.getEmpname() + ","                + e.getGender() + "," + e.getJob() + "," + e.getSalary());    }    HibernateSessionFactory.closeSession();
  3. 参数绑定机制

    • 占位符 替代具体参数

      Session session=HibernateSessionFactory.getSession();String hql="from Emp where empname like ? and salary>? and job=?";Query query=session.createQuery(hql);//按顺序赋值query.setString(0, "杨过");query.setDouble(1, 5000);query.setString(2, "神雕大侠");List<Emp> list=query.list();//处理集合,关闭sessionHibernateSessionFactory.closeSession();
    • 引用占位符 :param 替代具体参数

      ...Session session=HibernateSessionFactory.getSession();       String hql="from Emp where empname like :empname and salary>:salary and job=:job";Query query=session.createQuery(hql);//按名称赋值query.setString("empname", "杨过");query.setDouble("salary", 5000);query.setString("job", "神雕大侠");//不知道参数类型的情况下query.setParameter("sex","男");List<Emp> list=query.list();//处理集合,关闭sessionHibernateSessionFactory.closeSession();
    • 对象查询

      ...Session session=HibernateSessionFactory.getSession();       String hql="from Emp where empname like :empname and salary>:salary and job=:job";Query query=session.createQuery(hql);Emp ee=new Emp();ee.setEmpname("杨%");ee.setSalary(5000.0);ee.setJob("神雕大侠");//这里是将信息存入了emp对象//将emp对象放入作为查询参数//这里也支持Map格式的对象query.setProperties(ee);List<Emp> list=query.list();//处理集合,关闭sessionHibernateSessionFactory.closeSession();
  4. 排序查询
    在SQL中通过order by 子句和 ascdesc 实现排序操作。HQL也提供了这样的功能,用法和SQL类似,只是操作的不再是数据表的列名,而是实体对象的属性。

    //按员工年龄降序排序,多个条件用逗号**,** 分隔from Employee emp order by emp.age desc,emp.sex asc
  5. 聚合函数
    HQL同样也支持聚合函数,如 sum、avg、count、max、min 等。

    例1:查询员工的平均年龄    select avg(emp.age) from Employee emp例2:统计员工个数(统计任意列都可以)    select count(emp.age) from Employee emp
  6. 子查询
    HQL中子查询必须被圆括号()包起来

     查询年龄大于平均年龄的员工from Employee emp where emp.age>(select avg(age) from Employee)
原创粉丝点击