`
付绍高
  • 浏览: 37582 次
  • 性别: Icon_minigender_1
  • 来自: 江西临川
社区版块
存档分类
最新评论
阅读更多

Hibernate支持强大且易于使用的面向对象查询语言(HQL) 如果希望通过编程的方式创建查询,Hibernate提供了完善的按条件(Query By Criteria, QBC)以及按样例(Query By Example, QBE)进行Hibernate查询的功能。 你也可以用原生SQL(native SQL)描述Hibernate查询,Hibernate额外提供了将结果集(result set)转化为对象的支持。

1. 大小写敏感性问题

除了Java类与属性的名称外,查询语句对大小写并不敏感。如:SeLeCT sELEct 以及 SELECT 是相同的,但是 com.fendou.domain.User 并不等价于

com.fendou.domain.user并且 user.name 也不等价于 user.Name

2. from子句

HQL和原生SQL(native SQL)查询要通过为org.hibernate.Query的实例来表达。 这个接口提供了参数绑定、结果集处理以及运行实际查询的方法。 你总是可以通过当前Session获取一个Query对象:

Query query=session.createQuery(“hql”);

Hibernate中最简单的查询语句的形式如下  from User

大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到User

from User as u

关键字as 是可选的,我们也可以这样写:from User u

 

List users = session.createQuery( "from User as u ") .list(); 

List users = session.createQuery( " from User as u r where u.name = ?") 

.setString(0, name) .list(); 

where子句中允许使用的表达式包括 大多数你可以在SQL使用的表达式种类: 

数学运算符+, -, *, / 

二进制比较运算符=, >=, <=, <>, !=, like 

逻辑运算符and, or, not 

in, not in, between, is null, is not null, is empty, is not empty, member of and not member of 

"简单的" case, case ... when ... then ... else ... end, "搜索" case, case when ... then ... else ... end 

字符串连接符...||... or concat(...,...) 

current_date(), current_time(), current_timestamp() 

second(...), minute(...), hour(...), day(...), month(...), year(...), 

一个查询通常在调用list()时被执行,执行结果会完全装载进内存中的一个集合(collection) 查询返回的对象处于持久(persistent)状态。如果你知道的查询只会返回一个对象,可使用list()的快捷方式uniqueResult() 注意,使用集合预先抓取的查询往往会返回多次根对象(他们的集合类都被初始化了)。你可以通过一个集合来过滤这些重复对象。

 

3. 绑定参数

接口Query提供了对命名参数(named parameters)JDBC风格的问号(?)参数进行绑定的方法。 不同于JDBCHibernate对参数从0开始计数。 命名参数(named parameters)在查询字符串中是形如:name的标识符。 命名参数(named parameters)的优点是:

命名参数(named parameters)与其在查询串中出现的顺序无关

它们可在同一查询串中多次出现

它们本身是自我说明的  

1.   // JDBC风格的问号(?)参数绑定方法positional parameter 

Query q = sess.createQuery("from User u where u.name = ?"); 

q.setString(0, "Izi"); 

List users = q.list();

2.   //命名参数named parameter (preferred) 

Query q = sess.createQuery("from User u where u.name = :name"); 

q.setString("name", "Fritz"); 

List users = q.list();

3.   //命名集合参数named parameters list 

List names = new ArrayList(); 

      names.add("Izi"); 

      names.add("Fritz"); 

Query q = sess.createQuery("from User u where u.name in (:namesList)"); 

q.setParameterList("namesList", names); 

List users = q.list(); 

 

4. 迭代式获取结果(Iterating results)

某些情况下,你可以使用iterate()方法得到更好的性能。 这通常是你预期返回的结果在session,或二级缓存(second-level cache)中已经存在时的情况。 如若不然,iterate()会比list()慢,而且可能简单查询也需要进行多次数据库访问: iterate()会首先使用1条语句得到所有对象的持久化标识(identifiers),再根据持久化标识执行n条附加的select语句实例化实际的对象。

 

public List queryUsersubp(){

           Session session= HibernateUtil.getSession();

           String hql="select u.name, u.pass from User u";

           Query query=session.createQuery(hql);

           List users=query.list();

  //  Iterator it= users.iterator();

//         while(it.hasNext()){

//               Object[] count=(Object[])it.next();

//               System.out.println(count[0]+"-"+count[1]);

//         }

           return users;

      }

5. HQL中使用一些函数来进行结果统计

List results =session.find("select count(*), avg(u.age) from User as u");

ListIterator iterator = results.listIterator();

Object[] rows = (Object[]) iterator.next();

System.out.println("资料笔数: " + rows[0] + "\n平均年龄: " + rows[1]);

 

分享到:
评论

相关推荐

    HQL Eclipse Plugins 配置教程

    不喜欢使用myEclipse的...最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 英文图文教程 ...

    HQL批量插入、更新和删除

    ### HQL批量插入、更新和删除 #### 一、概述 在进行数据库操作时,批量处理数据是一项常见的需求。为了提高效率并减少网络传输开销,HQL(Hibernate Query Language)提供了一种灵活的方式来实现这一目标。HQL是...

    HQL 详解 HQL查询

    **HQL(Hibernate Query Language)**是Hibernate框架中推荐的标准查询语言,它是针对对象的查询语言,具有类似于SQL的语法,但更加强调面向对象的特性。HQL被设计用来查询和操作持久化对象,提供了比Criteria查询更...

    全面解析HQL语句 非常详细直接的HQL语句的功能介绍

    标题:“全面解析HQL语句 非常详细直接的HQL语句的功能介绍” 描述:“非常详细直接实用的HQL语句的功能介绍看过的人保准都说好” 本篇文章将深入探讨HQL(Hibernate Query Language)的核心功能及其在数据查询...

    HQL语句 HQL语句

    HQL语句 HQL语句 HQL语句 HQL语句 HQL语句

    HQL语法入门学习HQL语法入门学习

    在深入探讨HQL语法之前,我们首先需要理解什么是HQL。HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。与SQL(Structured Query Language)不同,HQL是专为ORM(Object-...

    Hibernate框架]Hql语句in中带参数的写法

    Hibernate框架Hql语句in中带参数的写法 Hibernate框架中,在使用HQL语句时,需要传递参数,而在HQL语句中使用in关键字时,需要特别注意参数的传递方式。在本文中,我们将讨论如何在HQL语句中使用in关键字带参数的...

    hql语句 使用大全

    ### HQL语句使用大全 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. ...

    03-HQL实用技术.pdf

    ### HQL实用技术知识点概述 #### 一、配置关联关系 **1.1 单向一对多关联关系** - **定义**: 单向一对多关联指的是一个父对象可以拥有多个子对象,但子对象并不知道它的父对象是谁。 - **配置方法**: - 在父对象...

    精通HQL(word格式)

    【HQL基础】 HQL,全称Hibernate Query Language,是Hibernate框架提供的面向对象的查询语言,它类似于SQL,但更专注于对象模型而非数据库表结构。HQL是Hibernate官方推荐的检索数据的主要方式,因为它能够更好地...

    HQL查询pdf资料

    ### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    HQL语言大全 高清晰可复制版

    HQL,全称为Hibernate Query Language,是Hibernate框架中的查询语言,它允许开发者以类似SQL的方式查询对象。在Java开发中,尤其是在处理大量数据持久化时,Hibernate作为一个强大的对象关系映射(ORM)工具,极大...

    精通HQL.doc

    本文将深入探讨HQL(Hibernate Query Language),它是Hibernate框架内官方推荐的查询语言,类似于SQL但更加面向对象。 HQL的基础在于它的语法与SQL相似,但更侧重于对象的查询,而不是数据库表。例如,你可以通过...

    精通hibernate HQL语言

    在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    HQL是hibernate自己的一套查询

    根据提供的标题、描述以及部分代码内容,我们可以了解到这段材料主要涉及的是Hibernate框架中的HQL(Hibernate Query Language)查询语言的使用。接下来将详细介绍HQL的相关知识点。 ### HQL概述 HQL是Hibernate...

    Hibernate之HQL查询

    在Hibernate中,HQL(Hibernate Query Language)是其内置的一种面向对象的查询语言,它是SQL的面向对象版本,用于检索和操作持久化对象。HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构...

    HQL语法大全,并带有详细的例子

    ### HQL语法详解及其应用案例 #### 一、HQL简介 HQL(Hibernate Query Language)是一种面向对象的查询语言,被广泛应用于Hibernate框架中,用于执行数据持久化操作。与传统的SQL相比,HQL更加面向对象,支持诸如...

    hql详细讲解,实例演示

    HQL(Hibernate Query Language)是Hibernate提供的一种查询语言,类似于SQL,但专用于Hibernate对象。在这个文档中,我们将深入讲解HQL以及相关的Hibernate配置。 首先,我们看到两个XML文件,它们是Hibernate的...

Global site tag (gtag.js) - Google Analytics