几种常用的分页技术

上传人:ji****72 文档编号:37642024 上传时间:2018-04-20 格式:DOC 页数:6 大小:149.50KB
返回 下载 相关 举报
几种常用的分页技术_第1页
第1页 / 共6页
几种常用的分页技术_第2页
第2页 / 共6页
几种常用的分页技术_第3页
第3页 / 共6页
几种常用的分页技术_第4页
第4页 / 共6页
几种常用的分页技术_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《几种常用的分页技术》由会员分享,可在线阅读,更多相关《几种常用的分页技术(6页珍藏版)》请在金锄头文库上搜索。

1、综述分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似.下页显示了两种常见的分页方式.意义意义分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内. 如果不顾一切的 Select * from 某个表,再将返回的数据一古脑的扔给客户,即使客户能够忍受成千上万足够让人眼花缭乱的表格式数据,繁忙的网络,紧张的服务器也会提出它们无声的抗议,

2、甚至有时会以彻底的罢工作为终结.这个结局有点像古代为所欲为的暴君和他忍无可忍的臣民之间的故事.程序员不是暴君,他希望程序使生活变得更好而不是更糟.考虑到企业信息系统多是三层甚至更多层架构的事实,程序员在向客户展示数据时都应该采取分页的形式.如果他不想被抱怨淹没或是半夜被电话惊醒的话.从请求发起到返回数据的整个过程从请求发起到返回数据的整个过程现在你已经下定决心想要分页了,在动手书写代码之前,先让我们回想一下,在典型的三层架构中,从请求发起到返回数据的整个过程.如下所示:在哪里进行分页在哪里进行分页从上面的图中我们可以观察得知,在 SQL 语句处理完毕后,数据库,WebApplication 和

3、 Browser 都能进行分页,那在哪里分页好呢?判断的标准是速度,显而易见,数据库服务器,Web 应用服务器和客户端之间是网络,如果网络传递的数据量越少,则客户端获得响应的速度越快.而且一般来说,数据库服务器和 Web 应用服务器的处理能力一般比客户端要强很多.从这两点来看,在客户端分页的方案是最不可取的.其次就剩下了在 Web 服务器端分页和在数据库端分页两种方式了,如果选择在 Web 服务器端分页的话,大部分的被过滤掉的数据还是被传输到了 Web 应用服务器端,与其这样还不如直接在数据库端进行分页.分页的分页的 SQL 语句语句如果我们是通过 JDBC 的方式访问数据库,那么就有必要根据

4、数据库类型采取不同的 SQL 分页语句,对于MySql 数据库,我们可以采用 limit 语句进行分页,对于 Oracle 数据库,我们可以采用 rownum 的方式进行分页.MySql 的的 Limit m,n 语句语句Limit 后的两个参数中,参数 m 是起始下标,它从 0 开始;参数 n 是返回的记录数。我们需要分页的话指定这两个值即可.如右是 limit 语句的一次应用,图示的 SQL 语句返回报销记录表中第四,第五条报销额度最大的记录。Oracle 数据库的数据库的 rownum在 Oracle 数据库中,分页方式没有 MySql 这样简单,它需要依靠 rownum 来实现.Row

5、num 表示一条记录的行号,值得注意的是它在获取每一行后才赋予.因此,想指定 rownum 的区间来取得分页数据在一层查询语句中是无法做到的,要分页还要进行一次查询.右图是分页的具体示例,它从帐户表中返回前十条记录.将两种方案统合起来将两种方案统合起来实际上两种方案的核心查询语句,分页的起点和终点都是一样的,只是方言有所不同.如果将特殊的部分封装起来,对外置以统一的接口,这样在转换数据库时更换被/* */屏蔽的部分即可.下页显示了统合的函数.List fetchPageRecords(int start,int end,String coreSql) throws CannotConnectT

6、oDBException,SQLExceptionStringBuffer sb=new StringBuffer();/ 下面是 Oracle 的分页/*sb.append(“ Select “);sb.append(“ * “);sb.append(“ from “);sb.append(“ ( “);sb.append(“ Select “);sb.append(“ t01.*, “);sb.append(“ rownum as newRowNum “);sb.append(“ from “);sb.append(“ ( “);sb.append(coreSql);sb.append(“

7、 ) t01 “);sb.append(“ where “);sb.append(“ rownum“+start+“ “);*/ 下面是 MySql 的分页sb.append(coreSql+“ limit “+start+“,“+end);String sql=sb.toString(); return search(sql);Hibernate 实现的分页实现的分页如果使用 Hibernate 取代 JDBC,那么上面这一步就不用我们自己费力了,Hiberate 会根据方言的种类选择不同的方案,具体我们不必知道也不想知道,要分页直接制定 firstRow 和 maxRow 即可,具体函数如下:public List findPageDatum(String hql,int firstRow,int maxRow)List result;Session session=HibernateUtil.getSession();Query q = session.createQuery(hql);q.setFirstResult(firstRow);q.setMaxResults(maxRow);result =(List) q.list(); session.flush();HibernateUtil.closeSession(session);return result;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号