中易网

JAVA WEB 分页

答案:6  悬赏:50  
解决时间 2021-02-17 13:09
JAVA WEB分页总是让人心烦,
分要多少给多少
谁有这方面的一些心得请提出宝贵的意见,我想制定一组类提供接口实现分页效果
条件分3点:
1,SQL的执行性能要最好
2,不能破坏MVC模式
3,通用.

哎,大家把题目看清楚。。。
我不是问怎么分页的。分页早就会用了。
而是
模式+性能+通用,
就好像hibernater里面有分页的功能,不过不适合非常复杂的SQL
比如我这几天写的SQL都是几千个字符以上。。
最佳答案
分页的话,应该是很简单的吧,只要用 页数 = (总数+PAGE_SIZE-1)/PAGE_SIZE...然后讨论分页的情况。

如果总页数==1&&当前页==1;
或者如果总页数!=1&&当前页==1;
或者如果总页数!=1&&当前页==总页数(就是最后一页)。
或者:大部分这种。。。

至于,SQL的话,你既然是JavaWeb,相信几大部分都用MYSQL吧,MYSQL提供了limit功能,比如
select * from user limit (p-1)*PAGE_SIZE,10 就能得到了。

如果有什么疑问,可以消息我,我随时愿意为您服务。
全部回答
使hibernate框架 里面有封装好了的分页的方法 setFirstResult();从哪一条记录开始 setMaxResult(); 每页显示的记录数 如当前是第一页 传page=1//页数请求 setFirstResult(5*(page-1)); setMaxResult(5); 从0开始拿5条数据 随page的请求而改变
1,先说MVC的模式。web层面只负责查看数据结果,同时向控制层传输当前请求页面数,数据逻辑层负责根据参数请求获取相应的数据。比如当前页面在看第三页,然后点击下一页,就传递参数4到控制层,控制层向数据逻辑层请求第四页的数据,数据层通过检索数据库获取结果反馈给页面显示。 2.在具体的实现上,主要的逻辑是在数据检索这块,这个你可以百度一把,网上有很多实现方式,但是绝大部分都是用一个bean来记录分页相关参数设置,比如每页显示多少条数据,记录当前页数,当前游标位置等。以及总数据条数,总页数。有了这些常量以及当前用户请求页数就可以很明确的进行数据请求操作。 3.说道数据库的性能上,其实这个里面有很多可以优化的地方。这个要看需求而定。比如你数据量本来就没多少那就不用启动多线程来查询。如果数据量庞大那就要用多线程,一个线程只请求第一页数据。在客人看第一页数据结果的时候启动令一个线程去请求后面的数据。这样当客人点击下一页的及其后面数据的时候是很快的。 对了。分页一定要用到游标这个概念。如果不实时查库那就要通过内存来实现数据缓存。这个也要看数据量的多少以及实际需求了。 呵呵,写好了分享一份。
先得到总共多少条记录,保存到一个变量中all,定义每页显示的记录条数ipage,就可以通过公式 页数=(all+ipage-1)/ipage。然后定义ResultSet时在后边加上可以使指针任意移动的参,第一页显示的时候让指针指向0,第二页让指针指向ipage,第三页让指针指向ipage*2,。。。。。指针的指向就是ipage(当前页码-1),这样就可以控制每页显示的内容。
分页如果你用框架的话!框架本身有提供分页!如果是直接写sql语句的话!网上面都有相关的分页sql语句!
这是我自己写的,不知道对lz有没有用 分页包括3个类Page.java,PageService.java,PageSizeConfig.java 一个接口:PageDAO 一个配置文件:page.xml 下面是源码:(比较懒,没有写注释) Page.java public class Page { public int pageSize; //页面大小 private int rowSize;//数据总数 private int pageConut;//页数 private int page;//当前页数 public Page(int rowSize,int page,int pageSize) { this.rowSize=rowSize; this.pageSize=pageSize; pageConut=(rowSize-1)/pageSize+1; this.page=page; } public int getRowSize() { return rowSize; } public void setRowSize(int rowSize) { this.rowSize = rowSize; pageConut=(rowSize-1)/pageSize+1; } public int getPageConut() { return pageConut; } public void setPageConut(int pageConut) { this.pageConut = pageConut; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } //首页 public void first() { page=1; } //末页 public void last() { page=pageConut; } //下一页 public void next() { page++; if(page>pageConut) { page=pageConut; } } //上一页 public void previous() { page--; if(page<1) { page=1; } } //转到第currentPage页 public void go(int currentPage) { page=currentPage; if(page<1) { page=1; } if(page>pageConut) { page=pageConut; } } public String getNext() { if(page1) { return "previous"; } return ""; } public int getPageSize() { return pageSize; } } PageServise.java public class PageService { public static void service(HttpServletRequest request,PageDAO dao,String session) { int pageSize=PageSizeConfig.pageSize(dao.getClass().getName()); String pageAction=request.getParameter("pageAction"); Page p=(Page)request.getSession().getAttribute(session); if(p==null) { p=new Page(dao.getRowCount(),1,pageSize); System.out.println("count="+dao.getRowCount()); } else { p.setRowSize(dao.getRowCount()); } if(pageAction==null) { return; } if("first".equals(pageAction)) { p.first(); } else if ("last".equals(pageAction)) { p.last(); } else if("next".equals(pageAction)) { p.next(); } else if("previous".equals(pageAction)) { p.previous(); } else if("go".equals(pageAction)) { int currentPage=Integer.parseInt(request.getParameter("currentPage")); p.go(currentPage); } request.getSession().setAttribute(session, p); int start=(p.getPage()-1)*pageSize; List list=dao.getDataList(start, pageSize); request.setAttribute("list", list); List pageList=new ArrayList(); for(int i=1;i<=p.getPageConut();i++) { pageList.add(new Integer(i)); } request.setAttribute("pageList", pageList); } } PageSizeConfig.java public class PageSizeConfig { public static final int DEFAULT_PAGE_SIZE=5; private static Map map; static { load(); } private static void load() { map=new HashMap(); try { InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("com/shop/page/page.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder bulider=factory.newDocumentBuilder(); Document doc=bulider.parse(is); NodeList nl=doc.getElementsByTagName("size"); for(int i=0;i { int getRowCount(); List getDataList(int start,int pageSize); } page.xml 20 我觉得有点不好的就是每个需要分页的地方都要创建一个session 如果lz觉得有用,email我:[email protected]
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国工商银行金猴献瑞金条5克多少钱
我男。23岁。。工资月薪4200!!!外赚2000-3
国际贸易中凭单议付中,单指什么?
女孩第一次疼了后,第二次是抱着什么心态接受
施华寇的洗发水好吗,很好闻,比沙宣的好吗
1的负4次方是多少
乐视tv和小米电视哪个性价比更高!?
为什么destoon添加内容不显示?
win7电脑上更换wifi账号
冰箱里,细菌会冻死吗?
陈奕迅有一个mv讲两个人一直在错过
我刚买的midea电磁炉从让它工作起到水烧开了
日记《一件令人感动的事》200字
对方微信回锤子我该回他什么?
点击QQ后就黑屏了,这是怎么回事
推荐资讯
法定税率作为税法上规定的税率指的是什么 A实
亲们:车是停地上好?还是地下停车场好?
本三的有哪些院校可能降分录取(文科) 我
中宝汽修地址在哪,我要去那里办事
泰康人寿保险股份有限公司巴南支公司在什么地
未成年上床影响胸部发育吗
天等县上映乡中心卫生院这个地址在什么地方,
驾驶证D证与C证不合在一块行吗
办一个免费试吃的活动怎么弄,怎么用词
在国际事务中 用英语怎么说
偷吸烟把被套烧了一个小洞,又不想让家里人知
是不是翡翠原石价格会降低
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?