[强调通用]Java数据访问层如何实现通用分页?!各种实现的优劣。

sharedata 2003-11-26 11:06:40
我要需要实现一个通用的分页方法(在Java数据访问层)。大家觉得通用的分页如何实现?怎么做更好?PetStore的方式觉得如何?如果选择PetStore的方式,您觉得她哪里不好?

请比较挑剔的帮我想想吧,这里先谢谢了!

说明:
1:问题的关键是通用,也就是让绝大部分人满意;
2:尽可能的给出设计甚至代码作参考更好;
3:请详细的评论各种实现的好坏;
4:可以给出参考哪些具体的东西,但希望有很好的水准的实现。
...全文
135 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunandrose 2004-02-26
  • 打赏
  • 举报
回复
实话说,这些方法都不怎么样,一看都是刚入门的写法,数据量超过10万条,根本没办法用。
告诉你们个思路:

逻辑层应该只做取数据的运算,把个结果集通过XML返回到浏览器,

分页,查询等等功能统统由浏览器来做,用JAVASCRIPT。

不明白的可以留言给我。
swinging 2004-02-25
  • 打赏
  • 举报
回复
我现在发现,不分页是最好的。
sweat。
xuzhenhua21 2004-02-23
  • 打赏
  • 举报
回复
mark
ydincoder 2004-02-18
  • 打赏
  • 举报
回复
mark
icebluenet 2004-02-13
  • 打赏
  • 举报
回复
mark
futurebus 2004-02-03
  • 打赏
  • 举报
回复
收藏。
进来学习学习。
arkang168 2004-01-08
  • 打赏
  • 举报
回复
up
sharedata 2004-01-06
  • 打赏
  • 举报
回复
暂不结贴,可以继续扩展话题到 整个分页的前端实现(上面的更多的是后端实现)。可以直接交流代码。

谢谢上述所有的朋友们!
sheryee 2004-01-05
  • 打赏
  • 举报
回复
楼上的各位,大家用的都是JDBC2.0所支持的方式,有没考虑过如果不支持的写法呢?
raymond323 2004-01-05
  • 打赏
  • 举报
回复
up
swinging 2003-12-30
  • 打赏
  • 举报
回复
具体的分页,可以参考hibernate。
我现在用的一个通用分页处理,其基本结构是这样的:
1、一个Page接口,使用接口,这样能处理很多意外情况,除了对LIST分页,有时候需要对XML DOCUMENT中的数据分页。所以,这样的接口很必要。
2、目标数据库是ORACLE,这是我目前使用的,其它数据库可以参考,
使用TYPE封装一个参数对象,主要的属性有:当前页码、总页数、总记录数、每页行数、是否有下一页、是否有上一页等等。
然后是一个查询参数对象,主要属性有:SQL语句的SELECT子句、WHERE子句、ORDER BY子句,之所以是子句,是要用于翻页时查询总记录数,因为不是一次查询所有记录(那样效率有问题),所以只是查找当前页所需的记录,而总记录数则另查。


查询时获取当前页码和每页记录数,将STRUCT对象传递给存储过程,存储过程根据给定参数组织动态SQL语句,查询结果,并返回,由相关DAO包装成PAGE实例。
查询当前页所需记录由当前页码和每页记录数计算,由SQL语句中ROWNUM作为WHERE子句条件过滤查询结果集。

另外,ROWNUM不是在排序前完成的,刚好相反,是完成排序后才出来的。
raymond323 2003-12-30
  • 打赏
  • 举报
回复
up
miwoo 2003-12-26
  • 打赏
  • 举报
回复
用hibernate好了:)
hotsmile 2003-12-26
  • 打赏
  • 举报
回复
好!!
sharedata 2003-12-25
  • 打赏
  • 举报
回复
目前采用PetStore的Page分页方式。上面的我会好好的看看的。
gks_cn 2003-12-18
  • 打赏
  • 举报
回复
分页要做通用的不好做,如果考虑用absolute需要把所有的记录都查出来,取要的。
如果记录急太大就要出问题。
如果用sql里面加rownum来控制,这样通用性又要大折,
所以小的查询可以分页,大的就不分了,如果要分要控制sql的结果几
samlu 2003-12-18
  • 打赏
  • 举报
回复
//设置记录集的光标到当前的第一条记录上
FRS.absolute(FFirstRecord);

在记录数达到几十万的数量级时你试试这个方法,非常慢,并且有时会抛出例外.

应该在rs中实现分批去记录,用要显示第一条记录数来控制rs.next()要比用absolute好.

rownum的执行在排序之前,用这个方法有可能你的几个页会出现同一条记录.
cnlf 2003-12-12
  • 打赏
  • 举报
回复
经典,已收藏!
lu8088 2003-12-11
  • 打赏
  • 举报
回复
up
过客猫2022 2003-12-09
  • 打赏
  • 举报
回复
对于MYSQL及Oracle还有一种叫rownum的东西,可有过它的分页
比如好像下面:
select * from test where rownum<(pagesize*(page+1)) and rownum(pagesize*page-1)
就可以实现在数据库方面分页了
对于不是很多的记录可用我的那个类XPageControl来实现.
如上面的类,例
XPageControl pc=new XPageControl(aResultSet,nnowPage,nPageSize);
while(pc.isInPage())
{
System.out.println(aResultSet.getString("name"));
pc.next();
}
System.out.println(pc.getMaxPage());
System.out.println(pc.getPageSize());
System.out.println(pc.getPage());



加载更多回复(6)

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧