首页常见问题正文

Hibernate的检索方式有几种?

更新时间:2023-11-16 来源:黑马程序员 浏览量:

IT培训班

  Hibernate的检索方式主要有五种,包括导航对象图检索方式、OID检索方式、HQL检索方式、QBC检索方式和本地SQL检索方式,接下里笔者针对Hibernate五种检索方式进行详细讲解。

  1.导航对象图检索方式

  导航对象图检索方式是根据已经加载的对象,导航到其他对象。它利用类与类之间的关系检索对象。例如,对于已经加载的学生对象,就可以利用学生对象自动导航找到该学生所对应的班级的对象,但前提是需要在对象关系映射文件上配置两者多对一的关系。其检索示例代码如下所示:

Student student=(Student)session.get(Student.class,1);
Grade grade=student.getGrade();

  2.OID检索方式

  OID检索方式是指按照对象的OID检索对象。它使用Session对象的get()和load()方法加载某一条记录所对应的对象,其使用的前提是需要事先知道OID的值。该检索方式的示例代码如下所示:

Grade grade1=(Grade)session.get(Grade.class,1);
Grade grade2=(Grade)session.load(Grade.class,1);

  3.HQL检索方式

  HQL(Hibernate Query Language)是Hibernate查询语言的简称,它是一种面向对象的查询语言,与SQL查询语言有些类似,但它使用的是类、对象和属性的概念,而没有表和字段的概念。

  HQL查询与SQL查询相比,具有以下优点。

  (1)直接针对实体类和属性进行查询,不用再编写繁琐的SQL语句。

  (2)查询结果直接保存在List集合中,不用再次封装。

  (3)针对不同的数据库会自动生成不同的SQL语句。

  在Hibernate提供的几种检索方式中,HQL是官方推荐的查询语言,也是使用最频繁的一种检索方式,其具有以下主要功能。

  (1)在查询语句中设定各种查询条件。

  (2)支持投影查询,即仅检索出对象的部分属性。

  (3)提供内置聚集函数,如sum()、min()和max()。

  (4)支持分组查询,允许使用group by和having关键字。

  (5)支持分页查询

  (6)支持子查询,即嵌套查询。

  (7)支持动态绑定参数。

  HQL的语法格式与SQL非常相似,并且在Hibernate中专门为HQL提供了一个Query查询接口执行各种复杂的查询语句。HQL的完整语法格式如下所示:

[select/update/delate...] from...[where...] [group by...] [having...] [order by...]
[asc/desc]

  从上述语法格式中可以看出,HQL查询与SQL查询非常类似。通常情况下,当检索表中的所有数据时,查询语句中可以省略select关键字,其示例如下所示:

String hql="from User";

  需要注意的是,上述语句中User表示类名,而不是表名,因此需要区分大小写,而from关键字不区分大小写。

  4.QBC检索方式

  QBC(Query By Criteria)是Hibernate提供的另一种检索对象的方式,它主要由Criteria接口、Criterion接口和Expression类组成,并且支持在运行时动态生成查询语句。QBC查询主要由Criteria接口完成,该接口由Session对象创建,Criterion是Criteria的查询条件,在Criteria中提供了add(Criterion criterion)方法添加查询条件。

  以查询id为1的User对象为例,使用QBC检索对象的示例代码如下所示:

//创建criteria对象
Criteria criteria=session.createCriteria(User.class);
//设定查询条件
Criterion criterion=Restrictions.eq("id",1);
//添加查询条件
criteria.add(criterion);
//执行查询,返回查询结果
List<User>gs=criteria.list();

  5.本地SQL检索方式

  本地SQL检索方式就是使用本地数据库的SQL查询语句进行查询。在Hibernate中,SQL查询是通过SQLQuery接口表示的,该接口是Query接口的子接口,因此可以调用Query接口的方法。

  使用本地SQL检索方式检索对象的示例代码,代码如下所示:

SQLQuery sqlQuery= session.createSQLQuery("select * from user");


  本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!

  作者:黑马程序员Java培训学院

  首发:https://java.itheima.com

分享到:
在线咨询 我要报名
和我们在线交谈!