点击这里给我发消息 点击这里给我发消息

hibernate在sql server下分页的处理

添加时间:2013-12-7
    相关阅读: 数据库 程序 框架 公司 优化 google 项目
  今天要在sqlserver环境下做一个简单的增删改功能,要用到分页,开始直接用oracle数据库环境一直用的一个jdbc重构过的类处理,发现不行,才想起oracle和sqlserver的分页sql语句写法是很不一样的,于是打算google一下,紧接又想,何不先看看hibernate在sqlserver环境是怎么处理分页的(我这里用的是hibernate 3.0)。
 
  先把hibernate配置文件的show_sql改成true,启动tomcat,在项目原来的一个功能里找到一个翻页的地方,比如每页显示两条,第一页的时候,hibernate的query语句是:SELECT TOP 2 * FROM  …… 恩,对的,看来hibernate还比较聪明,第一页直接用top语句,可是点下一页,当查询的记录应是3-4条时,hibernate的query语句是: SELECT TOP 4 * FROM…… 不理解了,难道hibernate这么笨吗,如果我要查的是第100万条到100万零10条的记录,难道他也是先把这100万零10条全部查出来吗?但是我测试的结果就是如果我要去第5000页的数据,他就是select top 10000 * from ……这样取出来的。但是如果把sql dialect  改成oracle,处理是用  rownum    直接去取需要的中间那么多条记录的。明天升级到最新的hibernate 3.3试试看会不会这样。难道java的开源框架对sql server这么感冒? 呵呵
 
  监控了下数据库,发现公司的php程序在翻页时也是这样处理的,我就奇怪了,sql server2005中也有rownum概念的啊。看来代码从sql server2000到2005以后还是要做一些优化的
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册