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查询的例子:
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* @author admin
* 使用HQL查询的例子
*/
public class HqlQuery {
public static void main(String[] args)throws Exception {
HqlQuery mgr = new HqlQuery();
//调用第一个查询方法
mgr.findPersons();
//调用第二个查询方法
mgr.findPersonsByHappenDate();
//调用第三个查询方法
mgr.findPersonProperty();
}
//第一个查询方法
private void findPersons(){
//获得Hibernate Session对象
Session session = HibernateUtil.currentSession();
//开始事务
Transaction tx = session.beginTransaction();
//使用HQL语句创建Query对象
List pl = session.createQuery("select distinct p from Person p join p.myEvents where title = :eventTitl")
//执行setString方法为HQL语句中的参数赋值
.setString("eventTile", "普通事情")
//使用Query实例的list()方法获取查询的全部实例
.list();
//遍历查询的全部结果
for(Object ele : pl){
Person p = (Person)ele;
System.out.println(p.getName());
}
//提交事务
tx.commit();
//关闭Session
HibernateUtil.closeSession();
}
//第二个查询方法
private void findPersonsByHappenDate()throws Exception{
//获取Hibernate Session对象
Session session = HibernateUtil.currentSession();
//开始事务
Transaction tx = session.beginTransaction();
//解析出Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = new Date("2017-01-03");
//通过Session对象的createQuery()方法创建Query对象
List pl = session.createQuery("select distinct p from Person p inner join p.myEvents evebt "
+ "where event.happenDate"
+ "between:firstDate and :endDate").
//设置参数
setDate("firstDate", start).
setDate("endDate", new Date()).
//返回结果
list();
//遍历结果集
for(Object ele:pl){
Person p = (Person)ele;
System.out.println(p.getName());
}
//提交事务
tx.commit();
//关闭Session
HibernateUtil.closeSession();
}
//第三个查询方法:属性的查询
private void findPersonProperty(){
//获得Session对象
Session session = HibernateUtil.currentSession();
//开始事务
Transaction tx = session.beginTransaction();
//使用HQL创建Query对象
List pl = session.createQuery("select distinct p.id,p.name,p.age"
+ "from Person p join p.myEvents")
//Query调用list()方法查询得到的全部属性
.list();
//遍历查询的全部结果
for(Object ele:pl){
Object[] objs = (Object[])ele;
System.out.println(Arrays.toString(objs));
}
//提交事务
tx.commit();
//关闭Session对象
HibernateUtil.closeSession();
}
}
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语句中的所使用的包名、类名、实例名、属性名都是区分大小写的。
HQL查询——HQL查询的基本用法的更多相关文章
- HQL常用的查询语句
摘录自某人,比较有用,比较全. // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- 《Java从入门到放弃》入门篇:hibernate查询——HQL
不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...
- 二。Hibernate 查询 HQL、SQL方式
hibernate的查询1.HQL方式:所有查询都是根据java对象名来完成,对象名替换表名2.SQL方式:保留原来的sql查询风格3.可以通过设置第一条和最大条数来实现各种数据库的分页查询4.通过B ...
- HQL和SQL查询
转自http://blog.csdn.net/aaa1117a8w5s6d/article/details/7757097 HQL和SQL的区别 标签: sqlhibernatejavasessio ...
- HQL多表查询
------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c. ...
- Hibernate HQL多表查询
1.内连接和迫切内连接 (1)内连接 HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称 (2)迫切内连接 HQL语句:from 实体类名 实体类 ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- Hibernate的批量查询——HQL
HQL(Hibernate Query Language)查询: 1.查询所有学生信息: public static void testSel() { Session session = Hibern ...
随机推荐
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- MAC破解软件
作为一个iOS程序开发的工程师,我们需要的是那些辅助的利器 但是这些利器确实需要高价购买的 reveal系统层级关系 Charles网络抓包破解 蓝灯(FQ必备) 小黑冒(搜索必备) Cornerst ...
- CMake的一些使用
1. 使用QT加载CMake工程 打开QT,"文件"->"打开文件或项目"->选中CMakeLists.txt文件,出现对话框,单击下一步,点击&q ...
- break和continue
break语句会终止循环,continue会在执行过程中返回循环的开头.
- jsp页面常用控件
1.点击按钮返回 上一页: <input type="submit" value="返回" onclick="javascript :histo ...
- Dev 关于用openFileDialog控件上传图片的问题
1. OpenFileDialog控件有以下基本属性 InitialDirectory 对话框的初始目录 Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.tx ...
- hashmap的底层实现
HashMap的底层实现都是数组+链表结构实现的,添加.删除.获取元素都是先计算hash值,根据hash值和table.length计算出index也就是table的数组的下标,然后进行相应的操作. ...
- JS调用OC方法并传值,OC调用JS方法并传值////////////////////////zz
iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码) 最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点 ...
- jsonp
一次关于JSONP的小实验与总结 前言: 今天,无意间看到自己某个文件夹下有个JSONP的东西.慢慢回忆起,这个东西是之前想写的一个demo,也不知道是多久以前了,但是不知道怎么的,给忘那边了.那 ...
- hdu5714 拍照[2016百度之星复赛C题]
由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...