文档章节

Hibernate高级查询方法

Zero零_度
 Zero零_度
发布于 2015/07/23 16:18
字数 902
阅读 23
收藏 0

投影查询——过滤部分字段
返回的List集合元素为Object[]
Query query = session.createQuery("select c.cname, c.csex from Customer c");
List list = query.list();
Iterator iter = list.iterator();
Object[] objs = null;
while(iter.hasNext()){
objs = (Object[]) iter.next();
for(int i = 0; i < objs.length; i ++){
System.out.println(objs[i]);
}
System.out.println("-------------------");
}

分页查询
Query query = session.createQuery("from Customer c");
query.setFirstResult((当前页-1) * 页大小);//从哪儿开始取
query.setMaxResults(页大小);//最多取多少条记录
Iterator iter = query.list().iterator();
Customer c = null;
while(iter.hasNext()){
c = (Customer) iter.next();
System.out.print(c);
}

连接查询——多表连接
连接类型 HQL语法
内连接  inner join 或者 join
迫切内连接 inner join fetch 或者 join fetch
左外连接 left outer join 或者 left join
迫切左外连接 left outer join fetch 或者 left join fetch
右外连接 right outer join 或者 right join

迫切左外连接
Query query = session.createQuery("from Customer c left join fetch c.orders o");
Iterator iter = query.list().iterator();
说明:
关键字:left join fetch
返回结果为Customer类型,再通过Customer对象导航到Orders对象
返回结果可能包含重复元素,通过Set去掉重复行
结果见备注

左外连接
Query query = session.createQuery("from Customer c left join c.orders o");
Iterator iter = query.list().iterator();
说明:
关键字:left join
返回的集合中,元素类型为Object[],该数组包含Customer和Orders对象,即:Object[0]=Customer,Object[1]=Orders
没有重复元素
结果见备注

内连接
Query query = session.createQuery("from Customer c inner join c.orders o");
Iterator iter = query.list().iterator();
说明:
关键字:inner join
返回的集合中,元素类型为Object[],该数组包含Customer和Orders对象,即:Object[0]=Customer,Object[1]=Orders
没有重复元素
结果见备注
和左外连接的处理方式相同

迫切内连接
Query query = session.createQuery("from Customer c inner join fetch c.orders o");
Iterator iter = query.list().iterator();
说明:
关键字:inner join fetch
返回结果为Customer类型,再通过Customer对象导航到Orders对象
返回结果可能包含重复元素,通过Set去掉重复行
结果见备注
处理方式和迫切左外连接相同

右外连接
Query query = session.createQuery("from Customer c right outer join c.orders o");
 Iterator iter = query.list().iterator();
说明:
关键字:right outer join
返回的集合中,元素类型为Object[],该数组包含Customer和Orders对象,即:Object[0]=Customer,Object[1]=Orders
没有重复元素
结果见备注
和左连接、内连接的处理方式相同

投影查询
Query query = session.createQuery("select c.cid, c.cname, o.odate from Customer c right outer join c.orders o");
 Iterator iter = query.list().iterator();
说明
投影即只返回一部分字段
返回的结果集中,元素类型为Object[],数组中元素个数即为select语句后的字段个数
结果见备注

分组查询与聚合查询——group by
对客户按性别分组
select c.csex, count(*) from Customer c group by c.csex
说明:
返回的结果集中,元素类型为Object[],数组元素个数即为返回的字段个数
统计出每个客户的订单数量
select c.cname, count(o) from Customer c left join c.orders o group by c.cname
找出年龄最大的客户
Query query = session.createQuery("select max(c.cage) from Customer c");
Object obj = query.uniqueResult();
通过uniqueResult()保证只返回一个结果
代码见备注

子查询
找出年龄大于平均年龄的客户
select c.cname, c.cage from Customer c where c.cage > (select avg(c.cage) from Customer c)
结果见备注
子查询可以和all,any,some,in,exists使用
找出至少有一份订单的客户
from Customer c where exists (from c.orders)
代码见备注

总结
了解Hibernate的检索策略对于查询结果的优化大有稗益
Hibernate的HQL语法和sql非常相似,有sql基础的人非常容易学习
只有精通SQL才能灵活应用,这一点毋庸置疑

本文转载自:http://blog.csdn.net/canduecho/article/details/4149924

Zero零_度
粉丝 69
博文 1267
码字总数 263854
作品 0
程序员
私信 提问
Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD
2016/12/01
154
0
liferay整理(留着备用)

Liferay 6.1开发学习(二十):Dynamic Query高级查询 在上一篇的博客《Liferay 6.1开发学习(十九):Liferay ServiceBuilder之自定义查询》之中介绍了一部分简单的Dynamic Query方法,可以...

IT小香猪
2014/07/17
344
5
Hibernate高级查询

@Test DDL创建表 hibernate标准化对象查询(QBC) 也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句 Criteria接口 存放查询条件的容器 Critertion接口 代表一个查询条件,可以...

嘿嘿!!
2016/09/16
0
0
【Java学习】mybatis和hibernate的区别

第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate...

fjj15732621696
2017/11/05
0
0
JDK6笔记(6)----JDBC4.0高级应用(2)

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1559287 JDK6笔记(6)----JDBC4.0高级应用(2) 3.4)Hibernate配置文件(Hiber...

chszs
2007/04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.9K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部