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(Hibernate Query Language)**是Hibernate框架中推荐的标准查询语言,它是针对对象的查询语言,具有类似于SQL的语法,但更加强调面向对象的特性。HQL被设计用来查询和操作持久化对象,提供了比Criteria查询更...
Hql PPt Hql PPt
不喜欢使用myEclipse的...最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 英文图文教程 ...
### HQL批量插入、更新和删除 #### 一、概述 在进行数据库操作时,批量处理数据是一项常见的需求。为了提高效率并减少网络传输开销,HQL(Hibernate Query Language)提供了一种灵活的方式来实现这一目标。HQL是...
在深入探讨HQL语法之前,我们首先需要理解什么是HQL。HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。与SQL(Structured Query Language)不同,HQL是专为ORM(Object-...
### HQL语句使用大全 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. ...
【HQL基础】 HQL,全称Hibernate Query Language,是Hibernate框架提供的面向对象的查询语言,它类似于SQL,但更专注于对象模型而非数据库表结构。HQL是Hibernate官方推荐的检索数据的主要方式,因为它能够更好地...
### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...
标题:“全面解析HQL语句 非常详细直接的HQL语句的功能介绍” 描述:“非常详细直接实用的HQL语句的功能介绍看过的人保准都说好” 本篇文章将深入探讨HQL(Hibernate Query Language)的核心功能及其在数据查询...
之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;
本文将深入探讨HQL(Hibernate Query Language),它是Hibernate框架内官方推荐的查询语言,类似于SQL但更加面向对象。 HQL的基础在于它的语法与SQL相似,但更侧重于对象的查询,而不是数据库表。例如,你可以通过...
在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...
HQL,全称为Hibernate Query Language,是Hibernate框架中的查询语言,它允许开发者以类似SQL的方式查询对象。在Java开发中,尤其是在处理大量数据持久化时,Hibernate作为一个强大的对象关系映射(ORM)工具,极大...
### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...
### HQL语句详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中的查询语言,它提供了面向对象的方式来进行数据库查询。HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达...
Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...
### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...
**HQL详解** Hibernate Query Language(HQL)是Hibernate框架中的对象关系映射查询语言,它允许开发者以面向对象的方式书写查询,而无需关心底层数据库的SQL语法。HQL是SQL的一个面向对象的版本,提供了更为简洁且...
在Hibernate中,HQL(Hibernate Query Language)是其内置的一种面向对象的查询语言,它是SQL的面向对象版本,用于检索和操作持久化对象。HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构...