`
danwind
  • 浏览: 232849 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

HQL语句查询学习笔记

阅读更多

     Hibernate的几种主要检索方式:HQL检索方式、QBC检索方式、SQL检索方式。HQL是Hibernate Query Language的缩写,是官方推荐的查询语言。QBC是Query By Criteria的缩写,是Hibernate提供的一个查询接口。Hibernate是一个轻量级的框架,它允许使用原始SQL语句查询数据库。

    HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询。可以使用HQL查询具有继承、多态和关联关系的数据。在检索数据时应优先考虑使用HQL方式。

 检索类的所有对象

使用HQL语句可以检索出一个类的所有对象,如HQL语句“from Student”表示检索Student类的所有对象。下面的程序检索学生类的所有对象。

        Query query=session.createQuery("from Student"); //创建Query对象

        List list=query.list();                                                   //执行查询

       

        //以下代码做显示用,以后不再写出来

        Iterator it=list.iterator();

        while(it.hasNext()){

                Student stu=(Student)it.next();

                System.out.println("id"+stu.getId());

                System.out.println("name"+stu.getSname());

                System.out.println("\n");

        }

*     session.createQuery()以HQL查询语句为参数,生成一个查询对象。本例中的HQL语句为“from Student”,这是from子句,格式如下。

from 类名

其中,类名可以为类的全限定名,如:

from hibernate.ch06.Student

Hibernate使用自动引入功能(auto import),会自动寻找需要的类,所以不推荐使用类的全限定名。注意,类名区分大小写,如果写成from student,将会抛出以下异常。

java.lang.NoClassDefFoundError: hibernate/ch06/student (wrong name: hibernate/ch06/Student)

*     HQL关键字不区分大小写,FROM、from和From是一样的。

调用query.list()时,真正开始执行HQL查询语句,并把查询的结果放在List中。

本例中查询的是Student类中的所有属性,如果查询Student类中的某一个或某几个属性,如查询所有学生的姓名和所在系,需要用到属性查询。

检索类的某几个属性

与SQL语句类似,HQL语句可以检索类的某一个或者某几个属性。以下代码查询所有学生的姓名和所在系。

        //创建Query对象

        Query query=session.createQuery("select Student.sname,Student.sdept from Student");

        List list=query.list();        //执行查询

        //以下代码显示查询的信息

        Iterator it=list.iterator();

        while(it.hasNext()){

                Object[] stu=(Object[])it.next();

                System.out.println("id"+stu[0]);

                System.out.println("name"+stu[1]);

                System.out.println("\n");

        }

*     属性查询使用select关键字,属性查询的格式如下。

select 属性1,属性2,… from 类名

*     属性前可以加上类名加以限定,如:

select 属性1,属性2,… from 类名

但一般没有必要。

属性查询区分大小写,上面的代码中如果写成:

select SNAME,Sdept from Student

将抛出异常,提示找不到属性SNAME和属性Sdept。

*     查询结果将只显示查询的属性列。

*     属性查询的结果,对于用it.next()获得的每条记录,可以存储在Object[]数组中,以便进行存取。

 指定别名

在查询时,可以用关键字as指定查询的别名,指定别名可以简化查询,有时必需指定别名才能进行查询。以下代码查询学号中含有4的学生的姓名和所在系。

select s.sname,s.sdept from Student as s where s.sno like '%4%'from Student s

s就是类Student的别名。注意as可以省略,即下面的查询语句和上面的语句是等效的。

select s.sname,s.sdept from Student s where s.sno like '%4%'from Student s

 where条件子句

where条件子句跟SQL中的where条件子句类似,它检索符合条件的对象。例如,查询所有所在系别为计算机系的学生:

select s.sname,s.sdept from Student s where s.dept=’计算机’

     where子句指定查询的条件,其语法和SQL类似。

     在where子句中可以指定比较运算符:>、>=、<、<=、<>,其含义分别为大于、大于等于、小于、小于等于、不等于。

查询年龄在22到23岁的学生:

from Student s where s.sage>=22 and s.sage<=23

    在where子句中指定查询的属性是否为null:is null、is not null,其含义分别表示为空和不为空。

查询所在籍贯为空的学生:

from Student s where s.saddress is null

使用distinct过滤掉重复值

使用distinct关键字将去掉结果中的重复值,只检索符合条件的对象。如下面的例子检索学生实例中的不重复的年龄。

        Session session=HibernateSessionFactory.currentSession();            //创建Session

        String hql="select distinct s.sage from Student s";                   //HQL查询语句

        Query query=session.createQuery(hql);                                    //创建查询

        List list=query.list();                                                    //执行查询

分享到:
评论

相关推荐

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    Hibernate数据检索(HQL)笔记

    - **查询优化**:合理地设计表结构和索引,使用合适的查询语句,避免全表扫描等方式来提高查询效率。 #### 四、总结 通过上述介绍,我们可以了解到 HQL 在 Hibernate 中的重要性和实用性。它不仅提供了简洁易用的...

    hibernate学习笔记

    例如,`hql = "select user from Userinfo user"`这样的HQL语句会返回Userinfo对象的列表。 7. **条件查询(包含中文)**: 当不与Spring框架结合使用时,Hibernate支持在HQL中直接使用中文字符进行模糊匹配,如`...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    hibernate框架开发2016版视频 四天学习笔记完整版

    【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...

    软件工程师学习笔记大全(C++,JAVA)4.rar

    这份名为“软件工程师学习笔记大全(C++,JAVA)4.rar”的压缩文件包含了软件工程师在学习C++和Java编程语言时的重要参考资料。这些文档详细涵盖了从基础到高级的各种主题,对于提升技能和准备面试非常有帮助。以下...

    Hibernate3 学习笔记.ppt

    HQL是面向对象的查询语言,类似于SQL,而Criteria API则是基于对象的查询方式,更具有动态性和灵活性。此外,还可以使用原生SQL查询并返回结果集。 【七、Hibernate最佳实践】 在使用Hibernate时,应注意以下最佳...

    hibernate学习笔记_北大青鸟课堂笔记全文

    【hibernate学习笔记_北大青鸟课堂笔记全文】 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方案。在Java应用中,尤其是在企业级开发中,它扮演着至关重要的角色,使得我们...

    Hibernate学习笔记源码及文档

    学习笔记涵盖了Hibernate的基础概念、配置、实体类的创建、数据类型映射、关系映射(一对一、一对多、多对多)、查询语言HQL、 Criteria API、CGLIB动态代理等核心内容。笔记详细记录了每个知识点的原理和实践步骤...

    hive学习笔记-比较全的知识

    标题中提到的"Hive学习笔记-比较全的知识"和描述中所述"相当不错的,适合初学者,下载绝对不亏"意味着本篇文档旨在为初学者提供一个全面的学习指南,覆盖Hive的主要概念和操作。而标签"hive"确定了文档的中心主题是...

    Hadoop,SPRK开发学习笔记

    在学习笔记中,你会了解Hive的元数据、表分区、桶等概念,以及如何创建、加载和查询数据。 接下来,Spark是另一种大数据处理框架,它强调速度、易用性和通用性。Spark通过内存计算显著提升了处理速度,同时提供了...

    Hibernate学习笔记(培训学习时的笔记)

    【Hibernate学习笔记】 Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的交互。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及事务处理等方面,帮助...

    Hibernate+学习笔记

    本学习笔记将深入探讨 Hibernate 的核心概念、配置、实体管理、数据查询以及事务处理等关键知识点。 1. **Hibernate 概念** Hibernate 是基于 Java 的持久化框架,它将对象模型与关系数据库模型进行映射,实现了...

    Hibernate3.2学习笔记

    《Hibernate3.2学习笔记详解》 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层的数据存取。本篇学习笔记将深入探讨Hibernate...

    hive学习笔记精华版

    【Hive学习笔记精华版】 Hive是大数据处理领域中的一款重要工具,它基于Hadoop构建,主要用于数据仓库和数据分析。作为一个离线处理系统,Hive可以将结构化的数据文件映射成数据库表,允许用户使用类似SQL的查询...

Global site tag (gtag.js) - Google Analytics