Dao层代码:
/**
* 根据当前页码数和每页信息数来返回一个Book集合
*
* @param currentPage 当前页码
* @param pageSize 每页记录数
* @return
*/
public List<Book> findByPage(Integer currentPage,Integer pageSize){
List<Book> books = new ArrayList<Book>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//获取资源链接对象
conn = getConnection();
//定义sql
String sql = "select * from book limit ? , ?";
//创建sql执行对象
pstmt = conn.prepareStatement(sql);
//给?,?进行赋值,第一个是当前开始索引的记录位置,第二个是索引的条数
//第一个参数是(当前页数-1)*每一页记录数,代表开始索引的位置
//第二个参数是每一页的记录数
pstmt.setInt(1,(currentPage - 1)*pageSize);
pstmt.setInt(2,pageSize);
//执行sql
rs = pstmt.executeQuery();
while (rs.next()){
Book book = new Book();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setPrice(rs.getDouble("price"));
book.setCategory(rs.getString("category"));
book.setPnum(rs.getInt("pnum"));
book.setImgurl(rs.getString("imgurl"));
book.setDescription(rs.getString("description"));
book.setAuthor(rs.getString("author"));
book.setSales(rs.getInt("sales"));
books.add(book);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs,pstmt,conn);
}
//返回一个带有数据的集合
return books;
}
public Integer countBook(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Integer num = 0;
try {
conn = getConnection();
String sql = "select count(*) from book";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()){
//获取第一行第一列的数字给num
num = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs,pstmt,conn);
}
return num;
}
PageBean实体类:
package com.ysw.web.entity;
import java.util.List;
public class PageBean {
private Integer currentPage; //当前页码数
private Integer pageSize; //每页记录数
private Integer count; //总记录数
private Integer totalPage; //总页数
private List<Book> books; //当前页的数据集合
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
Servlet层代码:
package com.ysw.web.servlet;
import com.ysw.web.entity.PageBean;
import com.ysw.web.service.BookService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/pageServlet")
public class PageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String currentPage = request.getParameter("currentPage");
int pageNo = 1; //默认一开始的pageNo = 1
//当我们前端传入一个currentPage过来时,currentPage不为空
if (currentPage != null) {
//给我们的pageNo进行赋值,赋值为我们当前的页码数
pageNo = Integer.parseInt(currentPage);
}
//我们自行定义每一页显示的记录条数为3
int pageSize = 3;
BookService bookService = new BookService();
//调用我们的service层,因为pageBean对象里面包含了所有的分页信息了
PageBean pageBean = bookService.findByPage(pageNo,pageSize);
//共享数据出去
request.setAttribute("pageBean",pageBean);
request.getRequestDispatcher("showAllBook.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Jsp页面代码:
<%--
Created by IntelliJ IDEA.
User: Simon
Date: 2020/2/1
Time: 23:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>国际图书商城</title>
<link rel="stylesheet" href="static/bootstrap/css/bootstrap.min.css"/>
<script src="static/bootstrap/js/jquery-3.1.0.min.js"></script>
<script src="static/bootstrap/js/bootstrap.min.js"></script>
<style>
table {
border: 3px solid;
margin: auto;
width: 900px;
text-align: center;
}
h3 {
text-align: center;
}
</style>
</head>
<body>
<h3>国际图书商城</h3>
<h3>多条件动态查询</h3>
<form action="searchServlet" method="post">
<table>
<tr>
<td>
编号:
</td>
<td>
<input type="text" name="id">
</td>
</tr>
<tr>
<td>
书名:
</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td>
最高价格:
</td>
<td>
<input type="text" name="maxPrice">
</td>
</tr>
<tr>
<td>
最低价格:
</td>
<td>
<input type="text" name="minPrice">
</td>
</tr>
<tr>
<td>
类别:
</td>
<td>
<input type="text" name="category">
</td>
</tr>
<tr>
<td>
最大库存:
</td>
<td>
<input type="text" name="maxPnum">
</td>
</tr>
<tr>
<td>
最小库存:
</td>
<td>
<input type="text" name="minPnum">
</td>
</tr>
<tr>
<td>
封面:
</td>
<td>
<input type="text" name="imgurl">
</td>
</tr>
<tr>
<td>
描述:
</td>
<td>
<input type="text" name="description">
</td>
</tr>
<tr>
<td>
作者:
</td>
<td>
<input type="text" name="author">
</td>
</tr>
<tr>
<td>
最高售量:
</td>
<td>
<input type="text" name="maxSales">
</td>
</tr>
<tr>
<td>
最低售量:
</td>
<td>
<input type="text" name="minSales">
</td>
</tr>
</table>
<center><input type="submit" value="查询"></center>
</form>
<table border="1" cellspacing="0">
<tr>
<th>编号</th>
<th>书名</th>
<th>价格</th>
<th>类别</th>
<th>库存</th>
<th>封面</th>
<th>描述</th>
<th>作者</th>
<th>售量</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<%--
使用foreach循环进行遍历输出
我们重新来理解一下foreach:
当我们在requestScope中传入一个books集合的时候,
我们的foreach容器就多了一个books集合,对其进行遍历也就是遍历books容器里面的每一个book对象
这样的话我们每一个book对象就可以通过"."的方式,把具体的属性值取出来,这里类似于mybatis
--%>
<%--
用于分页的:
<c:forEach items="${pageBean.books}" var="book" varStatus="vs">
--%>
<%--正常使用的/复杂查询使用的--%>
<c:forEach items="${books}" var="book" varStatus="vs">
<tr>
<td>${vs.count}</td>
<td>${book.name}</td>
<td>${book.price}</td>
<td>${book.category}</td>
<td>${book.pnum}</td>
<td>${book.imgurl}</td>
<td>${book.description}</td>
<td>${book.author}</td>
<td>${book.sales}</td>
<td>
<%--这里在路径上传了一个book的id=book.id过去给后台--%>
<a href="deleteBooksServlet?id=${book.id}">删除</a>
</td>
<td>
<a href="selectByIdServlet?id=${book.id}">更新</a>
</td>
<td>
<a href="addCartServlet?id=${book.id}">添加到购物车</a>
</td>
<td>
<a href="addDataServlet?id=${book.id}">查看详情</a>
</td>
</tr>
</c:forEach>
</table>
<br>
<br>
<br>
<center><b>请选择操作:</b></center>
<br>
<table>
<tr>
<td>
<a href="addBook.jsp">新增图书</a>
</td>
</tr>
<tr>
<td>
<a href="index.jsp">返回首页</a>
</td>
</tr>
<tr>
<td>
<a href="showCartServlet">查看购物车</a>
</td>
</tr>
<tr>
<td>
<a href="showDataServlet">查看浏览记录</a>
</td>
</tr>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<c:if test="${pageBean.currentPage==1}">
<li class="disabled">
</c:if>
<c:if test="${pageBean.currentPage!=1}">
<li>
</c:if>
<a href="pageServlet?currentPage=${pageBean.currentPage==1?1:pageBean.currentPage-1}" >
<span aria-hidden="true">
«
</span>
</a>
</li>
<c:forEach begin="1" end="${pageBean.totalPage}" var="i">
<c:if test="${pageBean.currentPage == i}">
<li class="active"><a href="pageServlet?currentPage=${i}">${i}</a></li>
</c:if>
<c:if test="${pageBean.currentPage!=i }">
<li><a href="pageServlet?currentPage=${i}">${i}</a></li>
</c:if>
</c:forEach>
<c:if test="${pageBean.currentPage==pageBean.totalPage}">
<li class="disabled">
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage}">
<li>
</c:if>
<a href="pageServlet?currentPage=${pageBean.currentPage == pageBean.totalPage?pageBean.totalPage:pageBean.currentPage+1}">
<span aria-hidden="true">
»
</span>
</a>
</li>
</ul>
</nav>
<span style="font-size:15px;margin-left:5px;">
共${pageBean.count}条记录,共${pageBean.totalPage}页
</span>
</div>
<%--<div class="page">--%>
<%--<a href="pageServlet?currentPage=${pageBean.currentPage==1?1:pageBean.currentPage-1}">--%>
<%--⁢⁢上一页--%>
<%--</a> --%>
<%--第${pageBean.currentPage}页/共${pageBean.totalPage}页 --%>
<%--<a href="pageServlet?currentPage=${pageBean.currentPage == pageBean.totalPage?pageBean.totalPage:pageBean.currentPage+1}">--%>
<%--下一页>>--%>
<%--</a>--%>
<%--</div>--%>
</body>
</html>