Hibernate 检索方式简介 2

本问将介绍

*  使用别名查询 

*  分页查询

* 排序

* 检索单个对象

* 按主键逐个查询

* 对滚动结果集查询

 

 

首先介绍下别名的几个方式 

 

 

 

分页查询

 

 

排序

 

1: HQL 使用order by 子句进行查询

2: QBC利用Order类排序

 

 

 

检索单个对象

 

 

*Query接口和Criteria接口都提供了list()方法返回一个List类型的查询结果 list中存放了满足查询条件的持久化对象

*uniqueResult()方法则返回一个对象。

 

 

 

 按主键逐个处理结果(iterte()方法)

 

 

当每次通过调用iterCus.next()的时候,该方法先到session的缓存以及二级缓存(在已经开启的情况下)查看是否存在特定的OID的Customer对象,如果存在则直接返回对象,否则就通过相应的SQL进行查询。

在这个中因为首先查询的是OID所以在缓存中如果不存在相应的持久化的对象的时候就会没执行一次next就会发出一条SQL,这就是我们所说的N+1问题。

 

但是在一下的情况下可以考虑使用iterate()

  *    customer表中存在大量的字段(此时只有加载OID就可以节省内存)

  * 启用了二级缓存(那就可能已经存在直接取就比较快)

 

在iterate()遍历的是时候Iterator一直处于打开的状态,因此在以下的情况下被关闭

* 遍历完所有对象之后

* 关闭session对象

* 通过org,hibernate.Hibernate.close(itertor)方法关闭对象

 

 

可滚动结果集

 

Query Criteria接口都提供了可滚动结果集的方法scroll()

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值