`
tenn
  • 浏览: 576183 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论
阅读更多

HQL:Hibernate Query Language,完整的HQL语法结构如下:
[select/update/delete...] [from...] [where] [group by... [having]] [order by...]
结构上看上去很像SQL,但HQL是非常有益使得被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。

实体查询(表)
String hql = "from TUser";  //select ... from T_User;
Query query = session.createQuery(hql);
List userList = query.list();
查询的目标实体存在着继承关系的判定,此例将返回所有TUser以及TUser子类的记录。
返回数据库所有库表的记录:"from java.lang.Object"
Where子句,类似SQL。
例:"from TUser as user where user.name='Erica'"                -------as为类名创建别名, 可以省略。

属性查询(表字段)
List list = session.createQuery("select user.name from TUser user ").list();
Iterator it = list.iterator();
while(it.hasNext()){
        System.out.println(it.next()); //返回的list数据结构中,每个条目都是一个String类型的name数据(而非TUser对象)
}
List list = session.createQuery("select user.name,user.age from TUser user ").list();
Iterator it = list.iterator();
while(it.hasNext()){
        Object[] results = (Object[])it.next();
        System.out.println(results[0]); //name
        System.out.println(results[1]);//age
}
动态构造对象实例
List list = this.session.createQuery("select new TUser(user.name,user.age) from TUser as user ").list();
Iterator it = list.iterator();
while(it.hasNext()){
        TUser user = (TUser)it.next(); //普通java对象,除了在构造时赋予的属性值外,其他属性均未赋值。
        System.out.println(user.getName()); //name
}
List list = this.session.createQuery("select new TUser(user.name,user.age) from TUser as user ").list();
Iterator it = list.iterator();
while(it.hasNext()){
        TUser user = (TUser)it.next(); //普通java对象,除了在构造时赋予的属性值外,其他属性均未赋值。
        user.setName("test");
        session.saveOrUpdate(user); //insert not update.
}

实体更新与删除
Transaction tx = session.beginTransaction();
String hql = "update TUser set age = 18 where id = 1";
// String hql = "delete TUser where age > 18";
Query query = session.createQuery(hql);
int ret = query.executeUpdate();
System.out.println("Update Records =>" + ret);
//System.out.println("Delete Records =>" + ret);
tx.commit();
注意:对缓存策略的影响。

HQL已越来越接近传统的SQL,在对象型数据库尚不成熟的今天(现在还是关系型数据库),通过面向对象的查询语言对关系型数据库进行访问,既满足了上层结构中面向对象设计的需求,也充分利用了现有技术平台,Hibernate(O/R)。

分组与排序

Order by字句
from TUser user order by user.name,user.age desc
Group by子句
Having 子句是针对Group by返回结果集的筛选语句,等同于where子句之于库表。
select count(user),user.age from TUser user group by user.age having count(user)>10

参数绑定

顺序占位符(?)
Query query = session.createQuery(from TUser user where user.name=? and user.age=?);
query.setString(0,"Erica"); // begin with 0
query.setInteger(1,20);
引用占位符
String hql = "from TUser where name=:name";
Query query = session.createQuery(hql);
query.setParameter("name","Erica");
可以使用JavaBean封装查询参数,query.setProperties(javabeanObject);

引用查询(代码终不允许出现SQL语句)

联合查询
HQL中的inner join,left outer join,right outer join,full join(not usually useful)分别与ANSI SQL中同名术语一一对应。

子查询
from TUser user where (select count(*) from user.addresses) > 1

分享到:
评论

相关推荐

    HQL语句 HQL语句

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

    HQL 详解 HQL查询

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

    hql ppt Hql PPt

    Hql PPt Hql PPt

    HQL Eclipse Plugins 配置教程

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

    HQL批量插入、更新和删除

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

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

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

    hql语句 使用大全

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

    精通HQL(word格式)

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

    HQL查询pdf资料

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

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

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

    sql转换hql工具

    之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;

    精通HQL.doc

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

    精通hibernate HQL语言

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

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

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

    HQL查询及语法

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

    HQL语句大全HQL语句大全

    ### HQL语句详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中的查询语言,它提供了面向对象的方式来进行数据库查询。HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达...

    Hibernate查询语言HQL.PPT

    Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...

    hibernateHQL关联查询

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

    HQL详解

    **HQL详解** Hibernate Query Language(HQL)是Hibernate框架中的对象关系映射查询语言,它允许开发者以面向对象的方式书写查询,而无需关心底层数据库的SQL语法。HQL是SQL的一个面向对象的版本,提供了更为简洁且...

    Hibernate之HQL查询

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

Global site tag (gtag.js) - Google Analytics