版权声明:本文为setlilei原创文章 转载请注明来源 https://blog.csdn.net/setlilei/article/details/84935911
把数据封装到PageBean 替代原有数据集合
实体类
public class PageBean<T> {
//当前页
private int currentPage;
//当前页显示的条数
private int currentCount;
//总条数
private int totalCount;
//总页数
private int totalPage;
//每页显示的数据
private List<T> list = new ArrayList<T>();
/*
* geter seter
*/
}
控制层
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserService service = new UserService();
//模拟当前是第一页
String currentPageStr = request.getParameter("currentPage");
if(currentPageStr==null) currentPageStr="1";
int currentPage = Integer.parseInt(currentPageStr);
//认为每页显示12条
int currentCount = 12;
PageBean<User> pageBean = null;
try {
pageBean = service.findPageBean(currentPage,currentCount);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("pageBean", pageBean);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
业务层
//分页操作
public PageBean findPageBean(int currentPage,int currentCount)
throws SQLException {
UserDao dao = new UserDao();
//封装一个PageBean并返回
PageBean pageBean = new PageBean();
//当前页private int currentPage;
pageBean.setCurrentPage(currentPage);
//当前页显示的条数private int currentCount;
pageBean.setCurrentCount(currentCount);
//总条数private int totalCount;
int totalCount = dao.getTotalCount();
pageBean.setTotalCount(totalCount);
//总页数private int totalPage;
/*
* 公式:总页数=Math.ceil(总条数/当前显示的条数)
* 12条数据 每页显示5条数据 显示3页
*/
int totalPage = (int) Math.ceil(1.0*totalCount/currentCount);
pageBean.setTotalPage(totalPage);
//每页显示的数据private List<T> userList = new ArrayList<T>();
/*
* 页数与limit起始索引的关系
* 12条数据 每页显示5条
* 显示第一页 limit 0,5 limit 0,5
* 显示第二页 limit 5,5 limit 0,5
* 索引index = (当前页数-1)*每页显示的条数
*/
int index = (currentPage-1)*currentCount;
List<User> userList = dao.findUserListForPageBean(index,currentCount);
pageBean.setUserList(userList);
return pageBean;
}
持久层
//获取所有用户数据
public List<User> findAllUser() throws SQLException {
return new QueryRunner(DataSourceUtils.getDataSource())
.query("select * from user", new BeanListHandler<User>(User.class));
}
//获得全部的用户条数
public int getTotalCount() throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select count(*) from user";
Long query = (Long) runner.query(sql, new ScalarHandler());
return query.intValue();
}
//获得分页的用户数据
public List<User> findUserListForPageBean(int index,int currentCount)
throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from user limit ?,?";
return runner.query(sql, new BeanListHandler<User>(User.class), index,currentCount);
}
<!--分页 -->
<div style="width: 400px; margin: 0 auto; margin-top: 45px;">
<ul class="pagination" style="text-align: center; margin-top: 10px;">
<!-- 上一页 判断当前页是否是第一页 -->
<c:if test="${pageBean.currentPage==1 }">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=1 }">
<li>
<a href="${pageContext.request.contextPath }/userList?currentPage=${pageBean.currentPage-1}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:forEach begin="1" end="${pageBean.totalPage }" var="page">
<!-- 判断当前页 -->
<c:if test="${pageBean.currentPage==page }">
<li class="active"><a href="javascript:void(0);">${page}</a></li>
</c:if>
<c:if test="${pageBean.currentPage!=page }">
<li><a href="${pageContext.request.contextPath }/userList?currentPage=${page}">${page}</a></li>
</c:if>
</c:forEach>
<!-- 下一页 判断当前页是否是最后一页 -->
<c:if test="${pageBean.currentPage==pageBean.totalPage }">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage }">
<li>
<a href="${pageContext.request.contextPath }/userList?currentPage=${pageBean.currentPage+1}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
</ul>
</div>
<!-- 分页结束 -->