首页价格区间搜索
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>