Hibernate查询技术

来源:互联网 发布:淘宝抢购网 编辑:程序博客网 时间:2024/06/16 08:57

  • Hibernate查询方式简介
    • HQL语法查询
      • HQL简介
      • HQL使用过程
      • Query接口
      • HQL语法
      • HQL高级查询
    • QBC语句查询
      • QBC查询
      • QBC查询条件
      • 样例查询
      • QBC立即获取关联对象
      • QBC统计
      • QBC分组统计
    • 原生SQL查询
    • hibernate查询方法选择的建议

Hibernate查询方式简介

    除了可以通过Session接口提供get()和load()方法获取指定ID的实体对象外,Hibernate提供了丰富的查询方式供开发者灵活应用,常见的查询方式有HQL、Criteria Query查询和原生SQL语句查询方式。

HQL语法查询

HQL简介

    Hibernate官方提供的类似于SQL语言语法的面向对象数据查询方式,HQL功能强大,目前不仅仅支持查询语句,也支持更新和删除操作。

HQL使用过程

    1.获取Hibernate的Session对象    2.调用session.createQuery(String hql)方法获取Query对象    3.调用Query对象的相关方法执行hql语句    4.Hibernate对hql语句进行解析,生成对应的SQL语句    5.执行SQL语句,对执行结果进行解析并返回
@Test    public void testHQL(){        //编写hql语句        String hql = "from Employee";        //调用session.createQuery(String hql)方法获取Query对象        Query query = session.createQuery(hql);        //调用Query对象的相关方法执行hql语句        List<Employee> list = query.list();    }

Query接口

1. org.hibernate.Query2. 通过session.createQuery(String hql)获取Query接口的实例3. 与session.load()和session.get()相比,它提供了更为强大的查询功能如:Hibernate通用的分页实现、参数绑定、返回可滚动的结果集等
方法列表 方法说明 List< E> list() 执行HQL语句,以List集合形式返回执行结果 Object uniqueResult() 执行HQL语句,返回单个执行结果 Iterator< E> iterator() 执行HQL语句,返回结果迭代器对象 Query setFirstResult(int firstResult) 设置查询结果的起始记录索引,用于分页 Query setMaxResults(int maxResults) 设置查询结果的最大记录数,用于分页

HQL语法

1. from语句的使用

1. from为HQL关键字,HQL关键字不区分大小写2. 注意的是Department不是表名,而是类名该HQL的作用类似于select * from dept;
/** * from语句的使用 */@Testpublic void testHQL(){    //编写hql语句    String hql = "from Department";    //调用session.createQuery(String hql)方法获取Query对象    Query query = session.createQuery(hql);    //调用Query对象的相关方法执行hql语句    List<Department> list = query.list();}

2. 查询指定的属性

select dname,dname from Department其中查询出的每一行记录都是一个数组
/** * 查询指定属性的语句 */@Testpublic void testQuery01(){    String hql = "select deptno,dname from Department";    Query query = session.createQuery(hql);    //注意此时返回的不是Department对象,而是Object[]数组    //在本例中每一个Object[]中有两个元素,分别是deptno以及对应的dname    List<Object[]> list = query.list();}
也可以将指定的记录封装为对象,需要在Department类中定义对应的有参构造方法,一定注意定义完构造方法后,一定也为该类提供无参构造方法。
/** * 查询指定属性的语句 */@Testpublic void testQuery02(){    String hql = "select new Department( deptno,dname) from Department";    Query query = session.createQuery(hql);    List<Department> list = query.list();}

3. 聚合函数
4. 聚合函数
5. 筛选查询结果
6. delete语句
7. update语句

HQL高级查询

1. 连接查询

1.1 隐式连接查询

1.2显式连接查询

2. HQL分页查询语句
3. 立即抓取关联对象
4. 参数绑定
5. 命名参数
6. 命名查询


QBC语句查询

QBC查询

  1. Query by Criteria
  2. 以更加面向对象的方式进行数据库查询操作

    @Testpublic void testCriteria(){    Criteria c = session.createCriteria(Employee.class);    List<Employee> list = c.list();    for(Employee emp : list){        System.out.println(emp);    }}

QBC查询条件

1. Criteria查询的查询条件由Criterion接口的某一个实现类实现,通过Criteria对象的add(Criterion c)方法添加查询条件。2. Restrictions类提供创建各种查询条件(Criterion)对象的方法
@Test    public void testCriterion(){        Criteria c = session.createCriteria(Employee.class);        c.add(Restrictions.between("sal",3000,5000));        c.add(Restrictions.isNotNull("comm"));        c.add(Restrictions.like("ename","张",MatchMode.ANYWHERE));        c.addOrder(Order.asc("sal"));        c.addOrder(Order.desc("hiredate"));        c.setFirstResult(0).setMaxResults(10);        List<Employee> list = c.list();    }

样例查询

1. 未完待续2. 阿斯蒂芬
这里写代码片

QBC立即获取关联对象

QBC统计

QBC分组统计


原生SQL查询


hibernate查询方法选择的建议

原创粉丝点击