- 浏览: 64587 次
- 性别:
- 来自: 长沙
最新评论
-
hyj1254:
说得好啊..
什么是个人核心竞争力 -
hehaibo_job:
楼主,数据库脚本怎么都没啊
Jfreechat实例 -
dazui521:
感动,我找了好久才找到这么好的例子
Jfreechat实例 -
dazui521:
...
Jfreechat实例
HQL语句。(已更新)2007年06月04日 星期一 18:20HQL(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);
----------------
现在有四张表: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);
发表评论
-
Struts 源码学习之ActionServlet ( 二)
2008-01-15 16:48 1129Struts 源码学习之ActionServlet ( 二) ... -
Struts 源码学习之ActionServlet ( 一)
2008-01-15 16:46 1122权所有:(xiaodaoxiaodao)蓝小刀 xiao ... -
Jakarta的公共连接池实现 - BasicDataSource
2008-01-10 14:52 6960| Jakarta的公共连接池实现 - BasicDa ... -
DWR
2008-01-03 15:25 1193DWR一个外国人实现的很有前途的AJAX框架。 多余的话就不说 ... -
用dwr封装表单项提交表单
2008-01-02 16:26 4006首先,配置dwr环境,网上很多资料都说得很详细,这里就不写了。 ... -
Java Reflection (JAVA反射)详解
2008-01-02 15:06 975Reflection是Java 程序开发语言的特征之一,它允许 ... -
DOM 解析
2008-01-02 09:30 1059To read and update, create and ... -
Hql
2007-12-29 13:54 1096Hib的检索方式 1'导航对象图检索方式。通过已经加载的对象, ... -
翻页例子
2007-12-29 09:38 856个MS SQLServer7数据库 DNS ... -
在JSP中访问数据库大全
2007-12-29 09:33 801这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学 ... -
jsp 调用sql server数据源
2007-12-29 09:31 1273import java.sql.*; import java. ... -
转:j2ee中DAO设计模式
2007-12-26 17:11 940最近参与WEB编程项目,采用STRUTS框架,在处理到数据持久 ... -
getAttribute和getParameter的区别
2007-12-26 14:42 2407getAttribute是取得jsp中 用setAttribu ... -
xml dom 教程
2007-12-26 14:31 804http://61.139.52.111:8090/kj/Ma ... -
在网页中引入其它html页面的几种方法
2007-12-26 11:30 47261.IFrame引入,看看下面的代码 <IFRAME N ... -
Tomcat 的数据库连接池设置与应用(Mysql篇)
2007-12-17 17:24 15031.将数据库驱动程序的JAR文件放在Tomcat的 commo ... -
Tomcat+Mysql连接池
2007-12-17 15:25 2491Tomcat+Mysql连接池2006年10月06日 星期五 ... -
tomcat+mysql
2007-12-17 15:23 966安装tomcat+mysql2007-12-02 19:461 ... -
如何在 JavaScript 中实现拖放(上)
2007-08-18 17:48 871JavaScript擅长于修改页面中的DOM元素,但是我们使用 ... -
如何在 JavaScript 中实现拖放(下)
2007-08-18 17:46 869终于完成了全文的翻译,由于时间比较参促,文章没有过多的校正与润 ...
相关推荐
HQL语句 HQL语句 HQL语句 HQL语句 HQL语句
不喜欢使用myEclipse的...最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 英文图文教程 ...
Hql PPt Hql PPt
### HQL语句使用大全 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. ...
在深入探讨HQL语法之前,我们首先需要理解什么是HQL。HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。与SQL(Structured Query Language)不同,HQL是专为ORM(Object-...
标题:“全面解析HQL语句 非常详细直接的HQL语句的功能介绍” 描述:“非常详细直接实用的HQL语句的功能介绍看过的人保准都说好” 本篇文章将深入探讨HQL(Hibernate Query Language)的核心功能及其在数据查询...
【HQL基础】 HQL,全称Hibernate Query Language,是Hibernate框架提供的面向对象的查询语言,它类似于SQL,但更专注于对象模型而非数据库表结构。HQL是Hibernate官方推荐的检索数据的主要方式,因为它能够更好地...
### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...
之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;
本文将深入探讨HQL(Hibernate Query Language),它是Hibernate框架内官方推荐的查询语言,类似于SQL但更加面向对象。 HQL的基础在于它的语法与SQL相似,但更侧重于对象的查询,而不是数据库表。例如,你可以通过...
在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...
### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...
### HQL语句详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中的查询语言,它提供了面向对象的方式来进行数据库查询。HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达...
HQL,全称为Hibernate Query Language,是Hibernate框架中的查询语言,它允许开发者以类似SQL的方式查询对象。在Java开发中,尤其是在处理大量数据持久化时,Hibernate作为一个强大的对象关系映射(ORM)工具,极大...
Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...
### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...
4. 分页查询:使用setFirstResult和setMaxResults方法实现分页,如“query.setFirstResult(0).setMaxResults(10)”。 5. 参数化查询:避免SQL注入,提高代码复用,如“SELECT u FROM User u WHERE u.name=:name”,...
query.setParameter(0, name); ``` ### HQL的优势 1. **独立于数据库**:HQL语句可以在不同的数据库上运行,无需关心底层的SQL语法。 2. **面向对象**:它将查询表达为对象和类之间的关系,使得代码更易于理解和...
在Hibernate中,HQL(Hibernate Query Language)是其内置的一种面向对象的查询语言,它是SQL的面向对象版本,用于检索和操作持久化对象。HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构...