HQL查询——HQL查询的基本用法

HQL查询——HQL查询的基本用法

1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言。SQL语言操作的对象是数据表、列等数据库对象,而HQL语言的操作对象是类、实例、属性等。

2.由于HQL语言是面向对象的查询语言,所以他具有面向对象的特征,即支持继承和多态。

3.HQL查询依赖于Hibernate提供的Query类,每个Query类实例对应一个查询对象。

4.使用HQL查询的步骤如下:

(1)获取Hibernate Session对象;

(2)编写HQL语句;

(3)如果以HQL语句作为参数,调用Session的createQuery()方法创建查询对象;

(4)如果HQL语句包含参数,则调用Query的setXxx()方法为参数赋值;

(5)调用Query对象的list()方法或者uniqueResult()方法返回查询结果列表(持久化实体集)。

5.执行HQL查询的例子:

 1 import java.text.SimpleDateFormat;
 2 import java.util.Arrays;
 3 import java.util.Date;
 4 import java.util.List;
 5
 6 import org.hibernate.Session;
 7 import org.hibernate.Transaction;
 8
 9 /**
10  * @author admin
11  *    使用HQL查询的例子
12  */
13 public class HqlQuery {
14     public static void main(String[] args)throws Exception {
15         HqlQuery mgr = new HqlQuery();
16         //调用第一个查询方法
17         mgr.findPersons();
18         //调用第二个查询方法
19         mgr.findPersonsByHappenDate();
20         //调用第三个查询方法
21         mgr.findPersonProperty();
22     }
23     //第一个查询方法
24     private void findPersons(){
25         //获得Hibernate Session对象
26         Session session = HibernateUtil.currentSession();
27         //开始事务
28         Transaction tx = session.beginTransaction();
29         //使用HQL语句创建Query对象
30         List pl = session.createQuery("select distinct p from Person p join p.myEvents where title = :eventTitl")
31                 //执行setString方法为HQL语句中的参数赋值
32                 .setString("eventTile", "普通事情")
33                 //使用Query实例的list()方法获取查询的全部实例
34                 .list();
35         //遍历查询的全部结果
36         for(Object ele : pl){
37             Person p = (Person)ele;
38             System.out.println(p.getName());
39         }
40         //提交事务
41         tx.commit();
42         //关闭Session
43         HibernateUtil.closeSession();
44     }
45     //第二个查询方法
46     private void findPersonsByHappenDate()throws Exception{
47         //获取Hibernate Session对象
48         Session session = HibernateUtil.currentSession();
49         //开始事务
50         Transaction tx = session.beginTransaction();
51         //解析出Date对象
52         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
53         Date start = new Date("2017-01-03");
54         //通过Session对象的createQuery()方法创建Query对象
55         List pl = session.createQuery("select distinct p from Person p inner join p.myEvents evebt "
56                 + "where event.happenDate"
57                 + "between:firstDate and :endDate").
58                 //设置参数
59                 setDate("firstDate", start).
60                 setDate("endDate", new Date()).
61                 //返回结果
62                 list();
63         //遍历结果集
64         for(Object ele:pl){
65             Person p = (Person)ele;
66             System.out.println(p.getName());
67         }
68         //提交事务
69         tx.commit();
70         //关闭Session
71         HibernateUtil.closeSession();
72     }
73     //第三个查询方法:属性的查询
74     private void findPersonProperty(){
75         //获得Session对象
76         Session session = HibernateUtil.currentSession();
77         //开始事务
78         Transaction tx = session.beginTransaction();
79         //使用HQL创建Query对象
80         List pl = session.createQuery("select distinct p.id,p.name,p.age"
81                 + "from Person p join p.myEvents")
82                 //Query调用list()方法查询得到的全部属性
83                 .list();
84         //遍历查询的全部结果
85         for(Object ele:pl){
86             Object[] objs = (Object[])ele;
87             System.out.println(Arrays.toString(objs));
88         }
89         //提交事务
90         tx.commit();
91         //关闭Session对象
92         HibernateUtil.closeSession();
93     }
94 }

6.HQL语句中可以使用占位符作为参数。HQL中的占位符既可以使用英文问号+索引的形式(?N);也可以使用有名字的占位符,使用有名字的占位符时,应该在占位符名字前增加英文冒号(:)。

7.成功编写了HQL语句以后就可以使用Session对象的createQuery(hql)方法创建一个Query,Query对象使用setXxx()方法为HQL语句的参数赋值。Query的所有setXxx()方法都有两个版本,分别用于根据参数索引赋值和根据参数名字赋值。

8.Query对象可以连续为多次的参数赋值,因为Query对象的setXxx()方法返回的依然是一个Query对象本身,在最后使用Query对象的list()方法来获取查询到的全部结果。

9.注意:HQL语句本身是不区分大小写的。即HQL语句的关键字、函数都是不区分大小写的。但是HQL语句中的所使用的包名、类名、实例名、属性名都是区分大小写的。

时间: 2024-10-26 10:33:12

HQL查询——HQL查询的基本用法的相关文章

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

HQL多表查询

------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c.linkManSet (2)具体实现 /* * (1) 创建 Query 对象 * * 调用 session 的 createQuery() 方法,参数是 hql * 语句,返回值是 Query 类型,创建以接收 */ Query query=session.createQuery("from Cu

HQL常用的查询语句

摘录自某人,比较有用,比较全. // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // >> 2,SQL查询的是表和表中的列:HQL查询的是对象与对象中的属性. // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的. // >> 4,SELECT可以省略. // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性) h

Hibernate的HQL多表查询

HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: 1 @Test 2 // 内连接 3 public void fun1() { 4 SessionFactory factory = null; 5 Session session = null; 6 Transaction tx = null; 7 try { 8 factory = Tools.getSessionFactory()

Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

本笔记继续使用dept部门表,emp员工表,一对多多对一双向映射. 1 条件查询 1.1    查询 员工表emp中 年龄eage小于30,月薪esal大于20000的员工姓名ename sql:select ename from emp where eage<? and esal >?; hql: select ename from Emp where eage<? and esal >? 1.2 问号的设置与别名 问号(?)的设置使用.setParameter(位置, 属性值)

Hibernate 的查询语言 HQL 与高级查询

Hibernate  的查询语言 HQL  与高级查询 数据库操作实现类的开发 import java.util.List; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transaction; import org.sf.dao.IDepartmentDao; import org.sf.entity.Departmen

《Java从入门到放弃》入门篇:hibernate查询——HQL

不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· 前面我们已经把hibernate中添加.删改.修改和根据ID得到对象的方法都学习了,但如何才能查询出多条记录呢?比如我想查询所有姓黄的作者,查询标题包含"中"字的博客等.这一篇就来介绍查询. hibernate有两种检索(查询)数据的方式,分别是HQL(Hibernate Query La

HQL和SQL查询

转自http://blog.csdn.net/aaa1117a8w5s6d/article/details/7757097 HQL和SQL的区别 标签: sqlhibernatejavasessionuser数据库 2012-07-17 22:03 11614人阅读 评论(0) 收藏 举报 目录(?)[+] hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在

开发指南专题七:JEECG微云快速开发平台查询HQL过滤器

开始学习wxWidgets,上一篇写了"安装wxWidgets遭遇的两大关卡"(简称"前文"). 先推荐一下这两天找到的学习材料. 博客中有一个系列教程,貌似作者没有写完,见<跟我学wxWidgets开发>系列教程. 要看书,就<使用wxWidgets进行跨平台程序开发>.我给的链接中,包括中书中的源码.这本书,是<Cross Platform GUI Programming With wxWidget>的中译本,译本中没有附录部