`
rigger21
  • 浏览: 131526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

HQL语句(结合实例)

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

HQL(Hibernate Query Language):是面向对象的查询语句,它的语法和SQL语句有些相像,在运行时才得以解析.HQL并不像SQL那样是数据操作语言,它用来取得对象,而不是进行update,delete和insert操作. HQL 是一门对大小写不敏感的的语言,所以SeLect与SELECT和sELeCT是相同的.


----------------
现在有四张表: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() 求和
4: 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语句(结合实例).doc

    HQL语句(结合实例).doc HQL语句(结合实例).doc HQL语句(结合实例).doc

    最新HQL语句实例代码

    常见HQL语句的示例包括输出结果,以及语句的分析总结

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

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

    HQL语句大全HQL语句大全

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

    HQL语句(实例查询)

    采用实例诠释hibernate查询的几种方式,比较容易上手,实用。

    HQL语句的语法

    HQL语句的语法结构与SQL相似,但更注重对象和类的概念。以下将详细介绍HQL语句的几个关键部分: 1. **from 子句**:这是HQL查询的起点,用于指定要查询的持久化类。例如,`from Person as p`表示从`Person`类中选择...

    hql语句大全hql语句大全

    ### HQL语句详解:精通Hibernate查询语言 #### 引言 HQL(Hibernate Query Language)是Hibernate框架中用于执行数据库操作的一种强大的查询语言。它提供了面向对象的语法,允许开发人员以一种接近于编程语言的方式...

    常用的hql语句用法解析

    本文将深入解析HQL语句的常见用法。 1. 大小写敏感性 HQL对Java类和属性的名称是大小写敏感的,但在关键字和表名方面,除了类名和属性名之外,HQL不区分大小写。因此,`SeLeCT`、`sELEct`和`SELECT`被视为相同,但`...

    hql语句语法详解hql语句

    ### HQL语句语法详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的机制来查询数据库中的数据,并将其映射到Java对象上。本篇文章将根据给定的信息深入探讨HQL的基本语法结构...

    HQL语句详解Select/update/deletefromwhere...

    在Hibernate中查询时,如果实体之间存在继承关系(如`Employee`类继承自`HourlyEmployee`和`SalariedEmployee`),则可以通过类似`"from Employee"`这样的HQL语句来查询基类`Employee`的所有子类实例。 HQL也支持`...

    学习HQL语句

    HQL查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,建立在面向对象的基础上。它提供了类SQL查询的功能,但查询目标是对象,而不是记录。HQL 拥有面向对象语言的所有特性,包括多态、...

    hql详细讲解,实例演示

    ]]&gt;`用于包裹HQL语句,防止特殊字符被解析。`&lt;filter-def&gt;`和`&lt;filter-param&gt;`定义了过滤器的参数,`myid`类型为整数。 在`Classes`类的映射中,`&lt;set&gt;`标签表示一个班级可以包含多个学生,`inverse="true"`表明...

    hql语句经典教程

    【HQL语句经典教程】 Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它在外观上类似于SQL,但具有显著的面向对象特性,如支持继承、多态和关联。本教程将深入讲解HQL的基本概念、用法...

    hibernate的hql语句

    【hibernate的HQL语句】是Hibernate框架中用于操作数据库的重要组成部分,它是一种面向对象的查询语言,类似于SQL,但更加强调对象的概念。HQL能够处理复杂的对象关系,如继承、多态和关联,使得在进行SSH(Spring、...

    HQL语句的用法

    `from`子句用于获取指定类的所有实例,例如`from Order`将返回Order类的所有对象,这与SQL中的`SELECT * FROM order`类似。可以同时查询多个类,如`from Order, Product`,并为类定义别名,如`from Order as o, ...

    hibernate 中HQL语句查询学习笔记

    使用HQL语句来检索某个类的所有实例非常简单: ```hql SELECT s FROM Student s; ``` 这条语句将返回`Student`类的所有实例。 ##### 检索类的某几个属性 如果只需要某些特定属性,可以通过如下方式指定: ```...

    HQL查询及语法

    3. **创建Query对象**:利用Session对象的`createQuery`方法,传入HQL语句创建Query实例。 4. **设置参数**:如果HQL语句中包含参数,需调用Query对象的`setXxx`方法为其赋值。 5. **执行查询并处理结果**:最后...

Global site tag (gtag.js) - Google Analytics