日期:2014-05-17  浏览次数:20830 次

java前段分页怎么设计
我现在查询大量的数据,需要分页查询,分页时候的URL怎么设计,每分一次页的查询的参数是传还是不传,查询参数该怎么保存
每页查询可不可以先保存在缓存中,用户可能返回查询该页,!
这个缓存怎么设计!大虾帮忙说下思想!


------解决方案--------------------
每次分页肯定要把参数带过来。。下次翻页的时候需要以前的参数。每次传递的时候只传递参数和当前页数就可以了。。分页的大小应该是固定的。。一般都没有缓存 只要你访问过数据库会自动帮你做缓存。
------解决方案--------------------
可以把数据全部拿出来,分页挺好做,可以条件查询就不还很好写。
------解决方案--------------------
看自己吧!!!! 有2种思路 第一种就是全部查出来存放到list 然后前台迭代!!! 后一种是 利用SQL 截取你想要的接那么多的语句! 只不过语句的参数得程序生成!!! 2者的好处 :(1)查询一次数据库 2)、 查询多次但是能相应的减少负担!!!
------解决方案--------------------
这中逻辑分页在海量数据的时候会把系统玩死
物理分页归根到底用到还是DB的分页策略

探讨
可以把数据全部拿出来,分页挺好做,可以条件查询就不还很好写。

------解决方案--------------------
楼主是用什么数据库 ?Mysql 还是 sql.
本人是用mysql实现的。

查询参数: mysql的分页我基于 limit 语句。在sql语句里使用占位符实现了。
jsp页面: 在<a>标签的href属性中拼接?page=${page+1}
page变量我使用request.setAttribute("page", pageindex);设置,比session简单些了
------解决方案--------------------


我的方法,楼主参考:
Java code

ListAction.java



package com.sy.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.sy.dao.AdminDao;
import com.sy.dao.NewsDao;
import com.sy.dao.impl.AdminDaoImpl;
import com.sy.dao.impl.NewsDaoImpl;
import com.sy.vo.Admin;
import com.sy.vo.News;

public class ListAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
        int i=1;//中间变量
    private int k;//储存最大页面数
    private int pageNow=1; //页码数,初始为1
    private int pageSize = 5 ; //页面行数 
    private int intRowCount;//总行数
    private int intPageCount;//总页数
    private Admin admin;
    private List<Admin> Adminss;
    private News news;
    @SuppressWarnings("unchecked")
    private List<News> Newss;
    
    private int id;
    private int aid;

    public News getNews() {
        return news;
    }

    public void setNews(News news) {
        this.news = news;
    }

    @SuppressWarnings("unchecked")
    public List<News> getNewss() {
        return Newss;
    }
    public void setNewss(List<News> newss) {
        Newss = newss;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    public Admin getAdmin() {
        return admin;
    }

    public void setAdmin(Admin admin) {
        this.admin = admin;
    }

    public List<Admin> getAdminss() {
        return Adminss;
    }

    public void setAdminss(List<Admin> adminss) {
        Adminss = adminss;
    }
    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public int getPageNow() {
        return pageNow;
    }

    public void setPageNow(int pageNow) {
        this.pageNow = pageNow;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getIntRowCount() {
        return intRowCount;
    }

    public void setIntRowCount(int intRowCount) {
        this.intRowCount = intRowCount;
    }

    public int getIntPageCount() {
        return intPageCount;
    }

    public void setIntPageCount(int intPageCount) {
        this.intPageCount = intPageCount;
    }
    public int getK() {
        return k;
    }

    public void setK(int k) {
        this.k = k;
    }
@SuppressWarnings("unchecked")
    @Override
//显示新闻列表
    public String execute() throws Exception {

        NewsDao npage=new NewsDaoImpl();
        intRowCount=npage.count();
        k=(intRowCount + pageSize - 1) / pageSize;
        intPageCount = (intRowCount + pageSize - 1) / pageSize;//计算出总页数
        if(pageNow<1){
            pageNow=1;
        }