网站首页 > 技术文章 正文
一、实体类的设计
二、分页工具PageBean.java
private int currentPage = 1; // 当前页, 默认显示第一页 private int pageCount = 8; // 每页显示的行数(查询返回的行数), 默认每页显示4行 private int totalCount; // 总记录数 private int totalPage; // 总页数 = 总记录数 / 每页显示的行数 (+ 1) private List<T> pageData; // 分页查询到的数据
三、dao数据访问:获取总记录数、分页显示数据
// 创建QueryRunner对象 private QueryRunner qr = JdbcUtils.getQueryRuner(); ? // 得到总记录数 public int getTotalCount() { String sql = "select count(*) from grjbxx"; try { // 执行查询, 返回结果的第一行的第一列 Long count = qr.query(sql, new ScalarHandler<Long>()); return count.intValue(); } catch (Exception e) { throw new RuntimeException(e); } } ? // 分页显示全部数据 public void listGrjbxxAll(PageBean<Grjbxx> pb) { // 查询总记录数; 设置到pb对象中 int totalCount = this.getTotalCount(); pb.setTotalCount(totalCount); /* * 问题: jsp页面,如果当前页为首页,再点击上一页报错! 如果当前页为末页,再点下一页显示有问题! 解决: 1. 如果当前页 <= 0; * 当前页设置当前页为1; 2. 如果当前页 > 最大页数; 当前页设置为最大页数 */ // 判断 if (pb.getCurrentPage() <= 0) { pb.setCurrentPage(1); // 把当前页设置为1 } else if (pb.getCurrentPage() > pb.getTotalPage()) { pb.setCurrentPage(pb.getTotalPage()); // 把当前页设置为最大页数 } // 1. 获取当前页: 计算查询的起始行、返回的行数 int currentPage = pb.getCurrentPage(); int index = (currentPage - 1) * pb.getPageCount(); // 查询的起始行 int count = pb.getPageCount(); // 查询返回的行数 // 3. 分页查询数据; 把查询到的数据设置到pb对象中 String sql = "select * from grjbxx limit ?,?"; try { // 根据当前页,查询当前页数据(一页数据) List<Grjbxx> pageData = qr.query(sql, new BeanListHandler<Grjbxx>(Grjbxx.class), index, count); // 设置到pb对象中 pb.setPageData(pageData); } catch (Exception e) { throw new RuntimeException(e); } }
四、servlet调用dao的方法,跳转到JSP页面显示
try { // 1. 获取“当前页”参数; (第一次访问当前页为null) String currPage = request.getParameter("currentPage"); // 判断 if (currPage == null || "".equals(currPage.trim())) { currPage = "1"; // 第一次访问,设置当前页为1; } // 转换 int currentPage = Integer.parseInt(currPage); // 2. 创建PageBean对象,设置当前页参数; 传入service方法参数 PageBean<Grjbxx> pageBean = new PageBean<Grjbxx>(); pageBean.setCurrentPage(currentPage); // 3. 调用service // 【pageBean已经被dao填充了数据】 GrjbxxDao grjbxxdao = new GrjbxxDao(); grjbxxdao.listGrjbxxAll(pageBean); // 4. 保存pageBean对象,到request域中 request.setAttribute("pageBean", pageBean); // 5. 跳转 uri = "/listgrjbxx.jsp"; } catch (Exception e) { e.printStackTrace(); // 测试使用 // 出现错误,跳转到错误页面;给用户友好提示 uri = "/error/error.jsp"; } request.getRequestDispatcher(uri).forward(request, response);
五、JSP页面
<tbody> <c:choose> <c:when test="${not empty requestScope.pageBean.pageData}"> <c:forEach items="${requestScope.pageBean.pageData}" var="grjbxx" varStatus="varSta"> <tr style="text-align: center;"> <!-- 数据居中 --> <td>${(pageBean.currentPage-1)*pageBean.pageCount+varSta.index+1}</td> <!-- 序号=(当前页码-1)*每页条数+index+1 --> <td>${grjbxx.sfzh}</td> <td>${grjbxx.xm}</td> <td>${grjbxx.xb }</td> <td><a href="${pageContext.request.contextPath }/QueryTxlServlet?id=${grjbxx.ryid}">修改</a> <a href="${pageContext.request.contextPath }/DelTxlServlet?id=${grjbxx.ryid}">删除</a></td> </tr> </c:forEach> </c:when> <c:otherwise> <tr> <td colspan="4">对不起,没有你要找的数据</td> </tr> </c:otherwise> </c:choose> <tr> <td colspan="5" align="center"> 当前${requestScope.pageBean.currentPage }/${requestScope.pageBean.totalPage }页 <a href="?currentPage=1">首页</a> <a href="?currentPage=${requestScope.pageBean.currentPage-1}">上一页 </a> <a href="?currentPage=${requestScope.pageBean.currentPage+1}">下一页 </a> <a href="?currentPage=${requestScope.pageBean.totalPage}">末页</a> </td> </tr> </tbody>
猜你喜欢
- 2024-10-16 MySQL 使用 limit 分页会导致数据丢失、重复和索引失效
- 2024-10-16 elasticsearch 分页查询 search_after 深分页
- 2024-10-16 SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase
- 2024-10-16 百万数据导出Excel,通过优化深度分页和线程编排,效...
- 2024-10-16 Mongodb 分页查询与排序查询 mongodb排序查询sort
- 2024-10-16 MVC模式下用Servlet和jsp分页的HelloWord
- 2024-10-16 elasticsearch 分页查询scroll 深分页
- 2024-10-16 京东终面:ElasticSearch深度分页如何优化?
- 2024-10-16 spring boot封装通用的查询+分页接口
- 2024-10-16 Elasticsearch 分页查询 from + size 浅分页
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)