更新时间:2023-11-16 来源:黑马程序员 浏览量:
Hibernate的检索方式主要有五种,包括导航对象图检索方式、OID检索方式、HQL检索方式、QBC检索方式和本地SQL检索方式,接下里笔者针对Hibernate五种检索方式进行详细讲解。
导航对象图检索方式是根据已经加载的对象,导航到其他对象。它利用类与类之间的关系检索对象。例如,对于已经加载的学生对象,就可以利用学生对象自动导航找到该学生所对应的班级的对象,但前提是需要在对象关系映射文件上配置两者多对一的关系。其检索示例代码如下所示:
Student student=(Student)session.get(Student.class,1); Grade grade=student.getGrade();
OID检索方式是指按照对象的OID检索对象。它使用Session对象的get()和load()方法加载某一条记录所对应的对象,其使用的前提是需要事先知道OID的值。该检索方式的示例代码如下所示:
Grade grade1=(Grade)session.get(Grade.class,1); Grade grade2=(Grade)session.load(Grade.class,1);
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关键字不区分大小写。
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();
本地SQL检索方式就是使用本地数据库的SQL查询语句进行查询。在Hibernate中,SQL查询是通过SQLQuery接口表示的,该接口是Query接口的子接口,因此可以调用Query接口的方法。
使用本地SQL检索方式检索对象的示例代码,代码如下所示:
SQLQuery sqlQuery= session.createSQLQuery("select * from user");
本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:黑马程序员Java培训学院