2021-05-16书城项目第五阶段(三) 首页价格区间搜索的实现

首页价格区间搜索

5.1首页价格区间搜索整体流程图

在这里插入图片描述

5.2 在bookdao中添加求总记录数和价格区间内的当前数据

1.写接口

 /**
     * 求总记录数
     *
     */
    int queryForPageTotalCount(BigDecimal min, BigDecimal max);
    /**
     * 求价格区间内的当前页数据
     */
    List<Book> queryForPageItems(int begin,int size,BigDecimal min,BigDecimal max);

2.在实现类中实现

 public int queryForPageTotalCount(BigDecimal min, BigDecimal max) {
        String sql = "select count(*) from t_book where price between ? and ?";
        Number number = (Number)queryForValue(sql,min,max);
        return number.intValue();
    }

    @Override
    public List<Book> queryForPageItems(int begin, int size, BigDecimal min, BigDecimal max) {
        String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` from t_book where price between ? and ? order by price limit ? , ?";
        return queryforList(sql,Book.class,min,max,begin,size);

    }

3.测试

    @Test
    public void queryForPageTotalCount() {
        System.out.println(bookDao.queryForPageTotalCount(new BigDecimal(10), new BigDecimal(80)));
    }

    @Test
    public void queryForPageItems() {
        for (Book queryForPageItem : bookDao.queryForPageItems(0, 4, new BigDecimal(10), new BigDecimal(80))) {
            System.out.println(queryForPageItem);
        }
    }

5.3 在bookservice中写程序

   @Override
    public Page pageByPrice(int pageNo, BigDecimal min, BigDecimal max) {
        Page<Book> page = new Page<>();

        //设置当前页的总记录数
        page.setPageTotalCount(bookDao.queryForPageTotalCount(min,max));
        //设置当前页的显示数量
        page.setPageSize(Page.PAGE_SIZE);

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

        //为了执行数据有效边境检查操作,设置当前页码调整到总页数之后。
        page.setPageNo(pageNo);


        //设置当前页数据
        //设置当前页数据时,先求begin(当前页索引)和pageSize.
        //当前页数据的索引按如下公式来求
        int begin = (page.getPageNo()-1)*page.getPageSize();
        //将begin形参传入函数中
        List<Book> books = bookDao.queryForPageItems(begin,page.getPageSize(),min,max);
        //设置当前页数据
        page.setItems(books);


        return page;
    }

测试:

 public void pageByPrice() {
        System.out.println(bookService.pageByPrice(0, new BigDecimal(10), new BigDecimal(80)));
    }

5.4 编写servlet程序

 protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取当前页码
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
        //获取价格下限
        int min = WebUtils.parseInt(req.getParameter("min"), 0);
        //获取价格上限
        int max = WebUtils.parseInt(req.getParameter("max"), Integer.MAX_VALUE);
        //获取分页对象
        Page page = bookService.pageByPrice(pageNo, new BigDecimal(min), new BigDecimal(max));

        page.setUrl("client/clientBookServlet?action=pageByPrice&min="+min+"&max="+max);

        //注意:在分页的时候,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/client/index.jsp").forward(req,resp);

    }

5.5 页面回显


            <form action="client/clientBookServlet" method="get">
<%--                加入隐藏域,提交参数与方法--%>
                <input type="hidden" name="action" value="pageByPrice">
<%--    回显价格:由于地址中有参数min,就可以回显。--%>
                价格:<input id="min" type="text" name="min" value="${param.min}">-
    <%--    回显价格:由于地址中有参数max,就可以回显。--%>
                <input id="max" type="text" name="max" value="${param.max}"><input type="submit" value="查询" />
            </form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值