查询系统往往是一个系统性能表现的重要的方面,相对于删除和更新来说,查询的机制在很大程度上决定了一个系统的性能。
Hibernate2中,Session方法接口提供了如下的办法完成批量数据的查询(Session.locad单一数据的查询)
Hibernate3中上述接口已经从Session方法中废除,统一由Query接口提供,分别对应如下的办法:
从实现机制上,两者没什么分别
Find/iterator方法可以根据查询条件返回符合条件的实体集。如下:
两者实现了统一的功能,但是大家在执行时看看他们输出的SQL语句,会发现有很多不同。两者的执行性能是不一样的,但是这又与Hibernate提供的缓存机制有很大的关系。
Find方法无法利用利用缓存来提供其执行性能,但iterator可以利用缓存机制来达到提高查询的性能。另外在内存使用方面,find方法是一次性查询处所有的结果,如果查询结果是海量的数据,那么就有可能出现内存溢出。但可以利用iterator和evict方法结合使用来将内存的消耗保持在一个可以接受的范围:
二级缓存可以设置最大的缓存量,达到峰值时自动清除旧缓存数据,但我们这里可以通过编码指定将对象从二级缓存中清除,有助于保存缓存的有效性
上面的方法只是解决了部分的问题,由于JVM的异步的内存回收机制,无效的对象还会不断地在内存中积累等待回收。如果数据量较大,会频繁激发JVM回收,造成性能急剧下降,因此实际开发中,建议采用SQL语句或者存储过程实现。
【编辑推荐】
本文名称:Hibernate中Session方法介绍
当前路径:http://www.shufengxianlan.com/qtweb/news39/467739.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联