分页

分页介绍

这里写图片描述
分页就是将数据以多页去展示,使用分页可以提高用户的感受。

分页技术概述

物理分页(java开发常用)

  • 在SQL查询时,从数据库只检索分页需要的数据
  • 通常不同的数据库有着不同的物理分页语句
  • MySQL物理分页,采用limit关键字
  • 例如:检索11-20条 select* from user limit 10,10;
  • 优点:不占用很大内存
  • 缺点:效率比较低

逻辑分页

  • 在SQL查询时,先从数据库检索出所有数据的结果集
  • 在程序内,通过逻辑语句获得分页需要的数据
  • 例如:检索11-20条 userList.subList(10,20);
  • 优点:效率高
  • 缺点:占有内存比较高

物理分页的实现

  • 直接使用jdbc完成
    • 使用滚动结果集,
    • 优点:跨数据库。
    • 缺点:性能低
  • 使用数据库本身提供的分页操作
    • 会使用每一个数据库特定的分页函数。
    • 优点:性能高。
    • 缺点:不能跨数据库。
      • MySQL:limit
      • sqlservlet:top
      • oracle:rownum

limit使用

  • select * from 表 limit m,n;
  • m:代表的是从第几条开始 注意:它是从0开始记录的
  • n:代表查询几条记录
    • 示例:分页,每页显示6条,要查询第五页的数据
    • select * from 表 limit (5-1)*6,6;
    • select * from 表 limit (页码-1)*每页条数,每页条数;
//CustomerFindAllByPageServlet.java
//默认访问第一页
int pageNum=1;
//每页条数 人为定义
int currentPage= 5//调用service,完成查询当前页数据操作
CustomerService service = new customerService();
try{
     PageBean pb=service.findByPage(pageNum,currentPage);
     //将数据存储到reqest域,请求转到页面展示
     request.setAttribute("pb",pb);
req.getRequestDispatcher("/showCustomerByPage.jsp").forward(req,resp);
}catch (SQLException e){
    e.printStackTrace();
}
CustomerService.java
//分页操作
//pageNum 页码
//currentPage 每页条数
public PageBean findByPage(int pageNum,int currentPage) throws SQLException{
    PageBean pb = new PageBean();
    List<Customer> cs=  dao.findByPage(pageNum,currentPage);

//查询总条数
     int totalCount=dao.findAllCount();
     //得到总页数
     int totalPage = Math.ceil(totalCount*1.0/currentPage);

    pb.setTotalCount(totalCount);//封装总条数
    pb.setTotalPage(totalPage);//封装总页数
    pb.setCs(cs);//封装当前页数据
    pb.setCurrentPage(currentPage);//封装每页条数
    pb.setPageNum(pageNum);//封装当前页码

    return pb;
}
//CustomerDao
//pageNum 页码
//currentPage 每页条数
public List<Customer> findByPage(int pageNum,int currentPage) throws SQLException{
    String sql = "select * from customer limit ?,?";
    QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
    reutrn runner.query(sql,new BeanListHandler<Customer>(Customer.class),(pageNum-1)*currentPage,currentPage)
}
//查询总条数
public int findAllCount(){
    String sql = "select count(*) from customer";
    QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
    long count = (long) runner.query(sql,new ScalarHandler());
    return (int) count;
}

分页代码实现

  • 在success.jsp页面上
    • <a href = "${pageContext.request.contextPath}/findAllByPage">查看所有客户信息(分页展示)</a><br>
  • 创建CustomerFindAllByPageServlet完成分页
    • 问题:要向页面携带的数据有很多,不仅是要展示的数据,例如:页码,总页数等,都需要携带到页面上。
    • 解决方案:创建一个分页Bean,在这个Bean中封装所有关于分页相关的数据。
public class PageBean{
    private int pageNum;//当前页码
    privete int numPerPage;//每页记录条数
    private int totalCount;//总记录条数
    private int totalPageNum;总页数
    private List<Customer> customers;//当前页需要数据

    //get,set方法
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值