`
jyangzi5
  • 浏览: 212264 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Hibernate HQL小结

阅读更多
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);

分享到:
评论

相关推荐

    Hibernate查询语言(HQL)

    #### 八、小结 HQL 提供了强大的面向对象查询能力,它不仅仅局限于简单的 SQL 操作,而是更加深入地融入了 Java 对象模型和 ORM 的特性。通过对 HQL 的掌握,开发者可以更高效地完成复杂的数据查询任务,同时保持...

    Hibernate 经常用的一些HQL语句

    ### 小结 HQL提供了丰富的查询语法,能够满足复杂的数据查询需求。通过上述实例,我们可以看到HQL不仅支持基本的CRUD操作,还支持更高级的功能,如模糊查询、参数绑定、聚合函数、分页以及多表关联等。掌握这些技巧...

    Hibernate 框架总结

    - Query接口允许开发者使用HQL(Hibernate Query Language)或者原生SQL语句来执行数据库查询操作。Criteria接口提供了更加面向对象的查询方式,它可以用来构建类型安全的查询。 Hibernate的工作原理大致如下: 1....

    hibernate小结

    ### Hibernate小结 #### 一、概述 在本篇文章中,我们将对Hibernate框架进行一个较为全面的小结。主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧...

    hql的增删改查

    #### 八、小结 通过上述示例,我们可以看到HQL提供了一种简洁且强大的方式来处理数据库中的增删改查操作。理解这些基本操作的实现原理,有助于开发者更好地利用Hibernate框架来提高应用程序的数据访问效率和性能。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     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实战(第2版 中文高清版)

     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 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     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:Java 对象持久化技术详解(第2版).part3

     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的知识总结

    ### 小结 以上总结的知识点涵盖了Hibernate中与数据库的数据类型映射,关系配置的XML和注解方法,以及一些基础的FAQ解答。由于Hibernate框架的广泛性,其功能和配置内容远远不止这些。要全面掌握Hibernate,还需要...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     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更新数据方法小结

    这是一个HQL(Hibernate Query Language)查询,用于从数据库中根据用户名(username)查找到对应的用户(Usertable)对象。然后通过迭代器(Iterator)检查是否存在符合条件的记录。如果存在,就可以取得该对象,并...

    Hibernate的检索方式

    ### 小结 以上介绍了Hibernate的五种检索方式:导航对象图检索、OID检索、HQL检索、QBC检索以及本地SQL检索。每种检索方式都有其独特的应用场景和特点。在实际开发过程中,根据项目的需求和技术背景选择合适的检索...

    hibernate初级教程图解

    #### 四、小结 本篇教程通过图解的形式介绍了Hibernate的基础概念及其核心接口的功能和使用方法。通过学习这些内容,开发者可以更好地理解Hibernate的工作原理,并能够在实际开发中有效地利用这些接口来提高开发效率...

    在JDBC,hibernate中实现分页

    #### 小结 以上代码展示了如何在Hibernate和JDBC中实现数据分页。通过Hibernate提供的API可以方便快捷地实现分页功能,而JDBC则需要更多的手动处理来构建合适的SQL语句和处理结果集。两种方法各有优势,开发者可以...

    Java数据库技术详解 DOC简版

    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笔记

    #### 小结 Hibernate是一个强大的ORM框架,它通过对象关系映射的方式简化了数据库操作,并提供了一系列高级特性来优化性能和简化开发流程。无论是简单的CRUD操作还是复杂的事务处理,Hibernate都能提供有效的解决...

Global site tag (gtag.js) - Google Analytics