2021-05-15 书城项目第五阶段(二)实现图书分页

5.1 分页模块的分析

在这里插入图片描述

5.2 分页模型Page的抽取

抽取五个分页模型的基本元素:
当前页数、总页数、总记录数、当前页数据、每页记录数。
在这里插入图片描述

5.3编写PageDao类并进行测试

1.接口

public interface PageDao<T> {
   

    //求总记录数
    Integer queryForPageTotalCount();
    //求当前页数据
    //begin表示当前页数据的开始索引
    //pageSize表示当前需要显示的记录条数
    List<T>  queryForItems(int begin,int pageSize);
}

2.实现类

public class PageDaoImpl extends BaseDao implements PageDao<Book> {
   
    @Override
    public Integer queryForPageTotalCount() {
   
        String sql = "select count(*) from t_book";

        Number number =(Number) queryForValue(sql);
        return number.intValue();
    }

    @Override
    public List<Book> queryForItems(int begin, int pageSize) {
   
    //注意:这个limit字句的后面一定是有空格的!为了防止出错,可以将该语句放入mysql中尝试查询。
        String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` from t_book limit ?,? ";

        return queryforList(sql,Book.class,begin,pageSize);
    }
}

3.测试:

public class PageDaoTest {
   
    PageDao pageDao = new PageDaoImpl();

    @Test
    public void queryForPageTotalCount() {
   
        System.out.println(pageDao.queryForPageTotalCount());
    }

    @Test
    public void queryForItems() {
   
        System.out.println(pageDao.queryForItems(1,Page.PAGE_SIZE));
    }
}

5.4编写bookservice类的page方法并进行测试

1.编写方法

public Page<Book> page(int pageNo, int pageSize) {
   
        Page<Book> page = new Page<>();
        //首先设置当前页码
        page.setPageNo(pageNo);
        //设置当前页的总记录数
        page.setPageTotalCount(pageDao.queryForPageTotalCount());
        //设置当前页的显示数量
        page.setPageSize(pageSize);
        //设置当前页数据
        //设置当前页数据时,先求begin(当前页索引)和pageSize.
        //当前页数据的索引按如下公式来求
        int begin = (page.getPageNo()-1)*pageSize;
        //将begin形参传入函数中
        List<Book> books = pageDao.queryForItems(begin, pageSize);
        //设置当前页数据
        page.setItems(books);


        //设置总页码
        Integer num = page.getPageTotalCount()%page.getPageSize();
        if(num==0){
   
            page.setPageTotal(page.getPageTotalCount()/page.getPageSize());
        }else{
   
            page.setPageTotal(page.getPageTotalCount()/page.getPageSize()+1);
        }
        return page;
    }

2.进行测试

   public void page() {
   
        System.out.println(bookService.page(1, Page.PAGE_SIZE));
    }

5.5编写bookservlet程序

1.先修改地址:

<a href="manager/bookServlet?action=page">图书管理</a>

2.然后编写servlet程序

 protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //分析:在进行分页之前,需要提供两个参数:
        // pageNo:当前页码
        //pageSize:每页显示数量
        //根据传入的参数确定当前页码,如果当前没有传入参数,则表示首页。
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
        int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
        //进行分页
        Page<Book> page = bookService.page(pageNo, pageSize);

        //注意:在分页的时候,jsp还需要page数据!所以要将page中的数据存档到request域中
        req.setAttribute("page",page);

        //分页中提取出数据
        List<Book> items = page.getItems();



        //将这个list<Book>集合中的数据保存到request域中即可
        req.setAttribute("books",items);

        //分页完成之后,请求转发到book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);

    }

3.写分页条

<div id="page_nav">
		<a href="#">首页</a>
		<a href="#">上一页</a>
		<a href
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值