java开发关于在前端实现分页查询的代码案例

分页查询的原理
在这里插入图片描述
假设这是一个数据表格,每一行都代表着一条数据,使用命令:
select * from table limit (起始条数,数据条数)
即可快速查找数据。
但是,对于前端来说,一般告诉你的都是页号,而不是数据的条数。
所以我们可以整理出一个思路:
将 页号,每一页的行数==起始位置,数据条数。

可以写出公式:起始位置=(页数-1)乘以页的大小
所有行数除以页的大小=共有几页 。
若得到页数乘以页的大小小于所有行数,则要再加1。

实现代码:

  1. 新建一个Pager辅助类,定义页号,每一页的条数大小,行数等等,以及编写其GET,SET方法,使其可读或可写。
package cn.edu.mju.project1.util;


import java.util.List;

public class Pager {
    private int page = 1;//页号
    private int pageSize = 10;//每一页记录的条数
    private int rows;
    private int pages;//不需要set方法(只读不写)
    private boolean first;//不需要set方法
    private boolean last;//不需要set方法
    private int prev;//不需要set方法 代表上一页
    private int next;//不需要set方法
    private List<Object> data;

    public Pager() {
    }

    public Pager(int page, int pageSize) {
        setPage(page);
        setPageSize(pageSize);
    }

    public int getPage() {
        if(page>pages ){
            page=pages;//不能超过总的页数
        }
        if(page < 1){
            page = 1;//页数不能为0
        }
        return page;
    }

    public void setPage(int page) {
        if(page <1){
            page = 1;
        }
        this.page = page;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        if(pageSize < 1){
            pageSize = 10;
        }
        this.pageSize = pageSize;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        if(rows >=0){
        this.rows = rows;//行数大于等于0时方可赋值
        }
    }

    public int getPages() {
        pages = rows/pageSize;
        if(pages * pageSize <rows){//所有行数除以页的大小=共有几页
            pages = pages +1;//若得到页数*页的大小小于所有行数,则要再加1
        }
        if(pages < 1){
            pages = 1;
        }
        return pages;
    }


    public boolean isFirst() {
        if (page == 1) {
            return true;
        } else {
            return false;
        }
    }
    public boolean isLast() {
        getPages();
        if (page == pages) {
            return true;
        } else {
            return false;
        }
    }

    public int getPrev() {
        prev = page - 1;
        if(prev <1){
            prev = 1;
        }
        return prev;
    }

    public int getNext() {
        getPage();
        next = page + 1;
        if(next >pages){
            next = pages;
        }
        return next;
    }

    public List<Object> getData() {
        return data;
    }

    public void setData(List<Object> data) {
        this.data = data;
    }
}

2.新建TestPager测试类对其进行测试。

import cn.edu.mju.project1.util.Pager;
import org.junit.Test;

public class TestPager {
    @Test
    public void testPager(){
        Pager pager =new Pager();
        pager.setPage(10);
        pager.setRows(11);
        System.out.println("page="+pager.getPage());
        System.out.println("pageSize="+pager.getPageSize());
        System.out.println("pages="+pager.getPages());
        System.out.println("prev="+pager.getPrev());
        System.out.println("next="+pager.getNext());
        System.out.println("first="+pager.isFirst());
        System.out.println("last="+pager.isLast());
    }
}

测试结果:
总的记录数为9条时,总页数为1页
在这里插入图片描述
总的记录数为11条时,总页数为2页
在这里插入图片描述
3.在BandDao中编写分页查询的代码

 public Pager paginate(int page, int pageSize, Band band) {
        Pager pager = new Pager(page,pageSize);

        String sql = "SELECT COUNT(*) AS total FROM band";//查找总的记录数
        StringBuilder where = new StringBuilder("WHERE 1=1");
        List<Object> params = new ArrayList<>();
        if(band != null){
            if(band.getName()!=null&&!"".equals(band.getName())){
                where.append("AND name LIKE ?");
                params.add("%"+band.getName()+"%");
            }
            if(band.getRemark()!=null&&!"".equals(band.getRemark())){
                where.append("AND remake LIKE ?");
                params.add("%"+band.getRemark()+"%");
            }
        }
        try{
            Connection conn = MySqlDbUtil.getConnection();
            PreparedStatement pst =conn.prepareStatement(sql+where.toString());
            for(int i=0;i<params.size();i++){
                pst.setObject(i+1,params.get(i));
            }
            ResultSet rs =pst.executeQuery();
            if(rs.next()){
                pager.setRows(rs.getInt("total"));
            }
            rs.close();
            pst.close();

            sql="SELECT * FROM band";
            pst = conn.prepareStatement(sql+where.toString()+"LIMIT ?,?");
            int index = 0;
            for(int i=0;i<params.size();i++){
                ++ index ;
                pst.setObject(i+1,params.get(i));
            }
            pst.setObject(++ index,(pager.getPage()-1)*pager.getPageSize());
            pst.setInt(++index,pager.getPageSize());
            rs =pst.executeQuery();
            List<Object> data =new ArrayList<>();
            while (rs.next()){
                band = new Band();
                band.setId(rs.getInt("id"));//取出ID的值将其放在Band对象中去
                band.setName(rs.getString("name"));
                band.setRemark(rs.getString("remark"));
                data.add(band);//将对象放入列表对象中
            }
            pager.setData(data);
            rs.close();
            pst.close();
            conn.close();//使用完,将其关闭,避免浪费资源
        }catch (Exception e){
            e.printStackTrace();
        }
        return pager;
    }
}

最后再做个测试类对其进行测试即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值