HQL(Hibernate Query Language):是面向对象的查询语句,它的语法和SQL语句有些相像,在运行时才得以解析.HQL并不像SQL那样是数据操作语言,它用来取得对象,而不是进行update,delete和insert操作. HQL 是一门对大小写不敏感的的语言,所以SeLect与SELECT和sELeCT是相同的.
<script type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
##################################
现在有四张表:student,team,course,student_course.
student----------------------表中有五个字段(id,name,cardId,age,team_id)
team-------------------------表中有两个字段(id,teamname)
course-----------------------表中有两个字段(id,name)
student_course------------表中有两个字段(stu_id,course_id)用来保存多对多的关系表
Student 是一个对象,student 是数据库中的一个表.
查询所有的Student对象时,最简单的HQL语句是: from Student,也可以写成 select s from Student (as)s. 注:这的as可以省略
##################################
1:简单的查询遍历对象:
遍历Student
Query query=session.createQuery("form Student"); //注: 如果Student对象不是唯一的,那么需要写上包名,如: from test.Student test为包名.
List list=query.list();
for(int i=0;i<list.size();i++)
{
Student stu=(Student)list.get(i);
System.out.println(stu.getName());
}
注意: 如果执行HQL语句"from Student,Course",并不时单单返回两个对象,而是返回两个对象的笛卡尔积,这类似SQL语句中字段的全外连接.实际的应用中,"from Student,Course"这种语句几乎是不回出现的.
2:属性查询:
----单个属性查询:
Query query=session.createQuery("select s.name form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
String name=(String)list.get(i);
System.out.println(name);
}
----多个属性查询:
Query query=session.createQuery("select s.name,s.age form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
Object obj[]=(Object[])list.get(i); //取得list中的第i个对象
System.out.println(obj[0]+"的年龄为: "+obj[1]);
}
3:实例化查询:
实例化查询结果可以说是对属性查询的一重改进.在使用属性查询时由于使用对象数组,操作和理解不太方便,如果将以个Object[]中的成员封装成一个对象就方便多了.
Query query=session.createQuery("select new Student(s.name,s.age) form Student s");
List list=query.list();
for(int i=0;i<list.size();i++)
{
Student stu=(Student)list.get(i);
System.out.println(stu.getName());
}
注:运行这个程序的时候,需要一个new Student(s.name,s.age)构造函数.在Student.java中编写这个构造函数.
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
4:查询链接:
与SQL查询一样,HQL也支持连接查询,如内连接,外连接和交叉连接.支持的链接类型是从ANSI SQL中借鉴来的.
1: inner jion (内连接)
2: left outer join (左外连接)
3: right outer join(右外连接)
4: full join(全连接--不常用)
inner jion 可以简写为join.
正常情况下必须要建关联。
select a.id, b.id from A a, B b where a.id = b.id;
上面每条记录返回的是一个Object[]对象。
你也可以把结果重新封装一下。
String hql = "select a.id, b.id from A a, B b where a.id = b.id";
List result = getHibernateTemplate().find(hql);
if (result.size() > 0) {
for (int i = 0; i < result.size(); i++){
Object[] obj = (Object[]) result.get(i);
//这里就可以重新封装数据
}
}
5:统计函数查询:
1: count()---------统计记录的条数
2: min()----------- 求最小值
3: max() ----------求最大值
4: sum()---------- 求和
5: avg() -----------求平均值
//取得Student的数量
Query query=session.createQuery("select count(*) from Student")
//avg()取得Student平均年龄
Query query=session.createQuery("select avg(s.age) from Student as s")
//upper()方法将字符串转为大写
Query query=session.createQuery("select upper(s.name) from Student as s")
//去除重复行distinct
Query query=session.createQuery("select distinct s.age from Student as s")
6:子查询:
all-------------------表示所有记录
any-----------------便是所有记录中的任意一条
somy 与any-------用法一样
in 等价于any
exists -------------表示子查询至少要返回一条数据.
all:
from Team t where 22<all(select s.age from Student s)
from Team t where all(select s.age from t.student s)>22
7:修改update()
Student stu=(Student)session.get(Student.class,"id"); //根据id 得到stu对象
stu.setName("123");
session.update(stu);
8:删除:delete()
Student stu=(Student)session.get(Student.class,"id"); //根据id 得到stu对象
session.delete(stu);
分享到:
相关推荐
#### 八、小结 HQL 提供了强大的面向对象查询能力,它不仅仅局限于简单的 SQL 操作,而是更加深入地融入了 Java 对象模型和 ORM 的特性。通过对 HQL 的掌握,开发者可以更高效地完成复杂的数据查询任务,同时保持...
### 小结 HQL提供了丰富的查询语法,能够满足复杂的数据查询需求。通过上述实例,我们可以看到HQL不仅支持基本的CRUD操作,还支持更高级的功能,如模糊查询、参数绑定、聚合函数、分页以及多表关联等。掌握这些技巧...
- Query接口允许开发者使用HQL(Hibernate Query Language)或者原生SQL语句来执行数据库查询操作。Criteria接口提供了更加面向对象的查询方式,它可以用来构建类型安全的查询。 Hibernate的工作原理大致如下: 1....
### Hibernate小结 #### 一、概述 在本篇文章中,我们将对Hibernate框架进行一个较为全面的小结。主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧...
#### 八、小结 通过上述示例,我们可以看到HQL提供了一种简洁且强大的方式来处理数据库中的增删改查操作。理解这些基本操作的实现原理,有助于开发者更好地利用Hibernate框架来提高应用程序的数据访问效率和性能。
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
1.5 小结 第2章 启动项目 2.1 启动Hibernate项目 2.1.1 选择开发过程 2.1.2 建立项目 2.1.3 Hibernate配置和启动 2.1.4 运行和测试应用程序 2.2 启动Java Persistence项目 2.2.1 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
### 小结 以上总结的知识点涵盖了Hibernate中与数据库的数据类型映射,关系配置的XML和注解方法,以及一些基础的FAQ解答。由于Hibernate框架的广泛性,其功能和配置内容远远不止这些。要全面掌握Hibernate,还需要...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
这是一个HQL(Hibernate Query Language)查询,用于从数据库中根据用户名(username)查找到对应的用户(Usertable)对象。然后通过迭代器(Iterator)检查是否存在符合条件的记录。如果存在,就可以取得该对象,并...
### 小结 以上介绍了Hibernate的五种检索方式:导航对象图检索、OID检索、HQL检索、QBC检索以及本地SQL检索。每种检索方式都有其独特的应用场景和特点。在实际开发过程中,根据项目的需求和技术背景选择合适的检索...
#### 四、小结 本篇教程通过图解的形式介绍了Hibernate的基础概念及其核心接口的功能和使用方法。通过学习这些内容,开发者可以更好地理解Hibernate的工作原理,并能够在实际开发中有效地利用这些接口来提高开发效率...
#### 小结 以上代码展示了如何在Hibernate和JDBC中实现数据分页。通过Hibernate提供的API可以方便快捷地实现分页功能,而JDBC则需要更多的手动处理来构建合适的SQL语句和处理结果集。两种方法各有优势,开发者可以...
1.5 本章小结 第2章 SQL语句基础之DDL 2.1 DDL基础 2.2 DDL操作视图 2.3 本章小结 第3章 SQL语句基础之DML 3.1 SELECT语句基础 3.2 WHERE子句 3.3 ORDER BY子句 3.4 GROUP BY和HAVING子句 3.5 ...
#### 小结 Hibernate是一个强大的ORM框架,它通过对象关系映射的方式简化了数据库操作,并提供了一系列高级特性来优化性能和简化开发流程。无论是简单的CRUD操作还是复杂的事务处理,Hibernate都能提供有效的解决...