Hibernate 之HQL数据查询
1. HQL简介
HQL是面向对象的查询语言,与SQL查询语言相比,虽然在语法上类似,都是运行时进行解析,但HQL并不像SQL那样操作的是数据表,列等数据库对象,HQL所操作的对象是类,对象,属性等。它也可以支持继承和多态等特征,在Hibernate 提供的各种检索方式中,HQL是使用最广泛的。
2. Query接口
Hibernate框架负责解析HQL语句,根据映射配置信息,把HQL查询语句解析成相应的SQL语句来执行数据库的查询操作。这一过程依赖的就是Query接口。Query的实例由Session的createQuery()方法创建,方法中包含一个HQL语句参数。Query接口的list()方法执行HQL查询,list()方法返回结果为List集合,集合中存放符合查询条件的持久化对象。
3.检索对象——from子句
将两个实体Commodity(商品)和Seller(商家)设置单向多对一关系,两者都有相应的数据。用JUnit进行测试。
3.1 输出商品名称和所属商家的名称
控制台输出:
可以看到,第一条语句是查询商品表获得所有的商品信息,并输出第一件商品名称。接着第二条语句,根据外键信息,查询商家表获得商品对应商家名称。接着输出下一件商品名称,注意,因为这件商品对应的商家信息也是A服装店,已经做过相应的查询,这时就不再做新的查询,而直接使用已有查询结果A服装店。当下面遇到新的商家信息(B数码店)还没查询,同样根据外键信息来查询商家表。
这样的查询过程,是因为有一个默认的懒加载状态,Hibernate 默认是不查询相应的外键信息所对应的数据,当需要的时候,才根据具体的需要做一个临时查询。这样的设置也是为了提高查询的效率和性能。
3.2 from子句中持久化类的引用
在前面编写的HQL语句中用了 from Commodity ,它的全限定名为 hbb.Commodity,但我们只需要用他的类名即可。在Java中规定使用类时,一定要指定全限定名,这样java环境才知道去哪获取这个类。而HQL语句中之所以可以省略是因为 auto-import(自动引入)缺省情况。在解析HQL语句的时候,会根据映射配置信息自动完成持久化类的导入。当然,在from子句中要使用全限定名也可以。
4. 选择——select子句
4.1 通过Object[]返回查询结果
select子句中未指定返回数据类型,默认为Object[]。
成功执行。如果只查询一个属性,依然用Object[]的话,就会报错,如果只有一个属性时,list()方法就会返回对象,而不是对象数组,这时需要进行一定调整。
同样可以直接写作 List list = query.list();
4.2 通过List返回查询结果
4.3 通过Map返回查询结果
注意get获取的key值,是字符串类型所以需要加""。如果属性用了别名,可以把序号改为别名。
5. 通过自定义类型返回查询结果
首先需要在持久化类中定义对应的构造器,构造器的参数就是我们要返回的属性信息。然后在select子句中调用定义的构造器。以自定义类型返回查询结果。
测试类中:
注意:当添加了自定义构造器后,在实体类中还需要添加无参构造器,因为在HQL语句中,当指定了查询目标(如Seller),Hibernate会调用指定构造器(如new Seller())来封装,但是如果没有指定构造器,Hibernate便会调用持久化类中默认的构造器,如前面Hql语句“from Seller”就没有指定构造器,所以要一个无参构造器来完成相应对象的创建。所以当增加了自定义构造器后,添加无参构造器。
6. Orderby子句
首先对商家的id进行升序排序,如果id相同情况下按照价格做降序排列,如果还一样则升序排列。
7. 总结
HQL语句大小写敏感,特别是持久化类及其属性的大小写。在我们自定义了构造器之后,一定要增加默认构造器。如果你觉得对你有点用的话,请点赞或关注我,谢谢观看。
Hibernate 之HQL数据查询的更多相关文章
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- HQL数据查询基础
HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...
- Hibernate之HQL检索(查询)方式
HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似.在Hibernate中,HQL是使用最广泛的检索方式. 具有下面经常使用功能: (1)在查询语句中,能 ...
- hibernate hql 查询指定…
以数组的形式抛出,前台页面就要把它当成一个数组来处理 以对象抛出,就要当成一个对象来处理. 在JSP页面使用标签时一定要注意这点. 版权声明:本文为博主原创文章,未经博主允许不得转载.
- hibernate框架学习之数据查询(HQL)
lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...
- hibernate的基础学习--多表关联数据查询
Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ...
- hibernate框架学习第五天:数据查询、投影等
复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...
- Hibernate批量处理数据、HQL连接查询
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 ...
- Hibernate批量处理数据、[HQL连接查询]
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...
随机推荐
- ptthon 网络编程
网络编程 网络目的 : 数据的传输 网络数据传输是一个复杂的过程 ISO :国际标准化组织 OSI 七层模型 --> 网络通信标准化流程 应用层 : 提供用户服务,具体内容由特定程序规定 表示层 ...
- solr搜索之搜索精度问题我已经尽力了!!!
solr搞了好久了,没啥进展,没啥大的突破,但是我真的尽力了! solr7可能是把默认搜索方式去掉了,如下: 在solr7里找了半天以及各种查资料也没发现这个默认搜索方式,后来想,可能是被edisma ...
- Android Studio 使用socks代理
Android Studio 使用socks代理 准备工作 1. 从https://www.privoxy.org/下载Privoxy软件 2. 安装Privoxy 3. 在Privoxy安装目录找到 ...
- mybatis 学习五 二级缓存不推荐使用
mybatis 二级缓存不推荐使用 一 mybatis的缓存使用. 大体就是首先根据你的sqlid,参数的信息自己算出一个key值,然后你查询的时候,会先把这个key值去缓存中找看有没有value,如 ...
- JDK8时间格式转换
来源:https://blog.csdn.net/zhangzijiejiayou/article/details/76597329 LocalDateTime 本地日期时间 LocalDateTim ...
- 30.概述strust2中的拦截器
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 拦截器是Struts2框架的核心,它主要完成解析请求参数.将请求参数赋值给A ...
- 25.OGNL与ValueStack(VS)-集合对象进阶
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...
- FullBg-网页图片背景自适应大小
网页背景自适应大小jQuery插件 fullBG.js http://cbavota.bitbucket.org/fullbg/ HTML <img id="background& ...
- 【转】关于BeanUtils.copyProperties的用法和优缺点
一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对Jav ...
- StretchBlt
StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩以满足目标矩形的尺寸. 原型: BOOL StretchBlt( HDC hdcDest ...