文章目录

  • MySQL的分页查询语句
  • 如何设置《上一页》和《下一页》的有效性呢?
  • 示例代码

MySQL的分页查询语句

使用 MySQL 的分页查询语句 select * from project limit 5,5,打开表 project,获取全部记录,只要第 5 条记录后的 5 条记录,不包含第 5 条记录在内,记录编号从 1 开始;如果记录编号从 0 开始,那么则从第 5 条记录起,要 5 条记录,包含第 5 条记录在内。

在 DAO 中将 select * from project limit ?,? 这条SQL语句框架准备好,在设置参数的时候,第1个参数设置为 (page-1)*rowsPerPage
第 2 个参数设置为 rowsPerPage

page 就是你要查看第几页,rowsPerPage 就是每页显示多少行,如果你要查看第 5 页,每页显示 5 行,那么就应该扣除前面 4 页的 20 行,应该从 21 条开始查询 5 条记录,所以 (page-1)*rowsPerPage 这个表达式计算出来正好是 20,那么第 2 个参数则是 5,表示的含义就是
从 20 后面查询 5 条记录,就是第 5 页要显示的数据了。

如何设置《上一页》和《下一页》的有效性呢?

查询的页数是第一页时,表示前面已经没有了,那么《上一页》按钮则不可以点击;查询的页数如果是最后一页时,表示后面已经没有了,那么《下一页》按钮则不可以点击。

这里使用 jstl 标签 <c:choose> 结合 el 表达式来实现。

 <c:choose><c:when test="${page gt 1}"><a href="projectlist.action?page=${page-1}">上一页</a></c:when><c:otherwise>上一页</c:otherwise>
</c:choose>

示例代码

DAO 的示例代码:

package priv.lwx.struts2.dao;import priv.lwx.struts2.entity.Project;
import priv.lwx.struts2.util.ConnectionUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;/*** description** @author liaowenxiong* @date 2022/2/7 13:18*/public class ProjectDAO {private static final String findAll = "select id,name,start_date,end_date from t_project";private static final String findAll2 = "select id,name,start_date,end_date from t_project limit ?, ?";private static final String totalRows = "select count(*) from t_project";/*** 获取所有项目的集合* @return*/public List<Project> findAll() {Connection conn;PreparedStatement pstmt;ResultSet rs;List<Project> list = new ArrayList<>();try {conn = ConnectionUtils.getConnection();pstmt = conn.prepareStatement(findAll);rs = pstmt.executeQuery();while (rs.next()) {Project project = new Project();project.setId(rs.getInt("id"));project.setName(rs.getString("name"));project.setStartDate(rs.getDate("start_date"));project.setEndDate(rs.getDate("end_date"));list.add(project);}} catch (SQLException e) {e.printStackTrace();}return list;}/*** 根据提供的页码和每页显示的行数获取工程集合** @param page* @param rowsPerPage* @return 工程的集合*/public List<Project> findAll(int page, int rowsPerPage) {Connection conn = ConnectionUtils.getConnection();PreparedStatement pstmt;ResultSet rs;List<Project> list = new ArrayList<>();try {pstmt = conn.prepareStatement(findAll2);pstmt.setInt(1, (page - 1) * rowsPerPage);pstmt.setInt(2, rowsPerPage);rs = pstmt.executeQuery();while (rs.next()) {Project project = new Project();project.setId(rs.getInt(1));project.setName(rs.getString(2));project.setStartDate(rs.getDate(3));project.setEndDate(rs.getDate(4));list.add(project);}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}return list;}/*** 获取总的页数* @param rowsPerPage 传入每页显示的行数* @return 返回总的页数*/public int getTotalPages(int rowsPerPage) {Connection conn;PreparedStatement pstmt;ResultSet rs;conn = ConnectionUtils.getConnection();try {pstmt = conn.prepareStatement(totalRows);rs = pstmt.executeQuery();rs.next();int totalRows = rs.getInt(1);if (totalRows % rowsPerPage == 0) {return totalRows / rowsPerPage;} else {return totalRows / rowsPerPage + 1;}} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}}

Action 的示例代码:

package priv.lwx.struts2;import priv.lwx.struts2.dao.ProjectDAO;
import priv.lwx.struts2.entity.Project;import java.util.List;/*** description** @author liaowenxiong* @date 2022/2/7 15:19*/public class ProjectListAction {// inputprivate int page = 1;private int rowsPerPage = 3;// outputprivate List<Project> projects;private int totalPages;public int getTotalPages() {return totalPages;}public void setTotalPages(int totalPages) {this.totalPages = totalPages;}public String execute() {ProjectDAO pdao = new ProjectDAO();// projects = pdao.findAll();projects = pdao.findAll(page, rowsPerPage);totalPages = pdao.getTotalPages(rowsPerPage);return "success";}public List<Project> getProjects() {return projects;}public void setProjects(List<Project> projects) {this.projects = projects;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getRowsPerPage() {return rowsPerPage;}public void setRowsPerPage(int rowsPerPage) {this.rowsPerPage = rowsPerPage;}
}

jsp 示例代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>Project List
</h1>
<h2><c:choose><c:when test="${page gt 1}"><a href="projectlist.action?page=${page-1}">上一页</a></c:when><c:otherwise>上一页</c:otherwise></c:choose>|第${page}页|<c:choose><c:when test="${page lt totalPages}"><a href="projectlist.action?page=${page+1}">下一页</a></c:when><c:otherwise>下一页</c:otherwise></c:choose>
</h2>
<table width="90%" border="2"><tr><td>ID</td><td>NAME</td><td>Start Date</td><td>End Date</td></tr><c:forEach items="${projects}" var="project"><tr><td>${project.id}</td><td>${project.name}</td><td>${project.startDate}</td><td>${project.endDate}</td></tr></c:forEach>
</table>
</body>
</html>

以上的方式是通过 jstl 标签库和 el 表达式相结合来实现的,当然我们也可以通过 Java 代码来实现,就是在 jsp 中添加如下的 Java 代码片段:

<%
String strPage = request.getParameter("page");
int Page = Integer.parseInt(strPage);
if(page!= 1){
page = page-1;
out.print("<a href='projectlist.action?page="+page+"'>上一页</a>");
}else{
out.print("上一页");
}%>

分页查询的实现(struts2+jsp+jstl+el)相关推荐

  1. 【JSP教科书】JSP知识在线指南(记录知识JSP体系、EL表达式、JSTL标签库、JSP开发模型和分页查询)

    文章目录 @[toc] 一.JSP简介 1.1 什么是JSP? 1.2 JSP的特点 1.3 JSP为什么也是Servlet 1.4 tomact服务器中的资源分析 1.4.1 tomact服务器中的 ...

  2. WEB阶段5:JSP、EL、JSTL、MVC软件结构

    JSP.EL.JSTL.MVC软件结构 回顾 Cookie对象 与Cookie操作相关的方法 Cookie类的方法 作用 Cookie(String name,String value) 构造方法,通 ...

  3. Access数据库 实现分页查询

    Access数据库 实现分页查询 目录 说明 项目的结构 SQL语句 Servlet:page.java 显示页面query.jsp 访问页面hello.jsp 总结 目录 说明 项目环境:Eclip ...

  4. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...

  5. 大前端汇总,EMMET、HTML、XML、CSS、JS、dom4j、JDBC、DButil、 servlet、jsp、EL、JSTl、同步分页、filter、AJAX

    第一章 EMMET语法 1. syntax 快捷键介绍 Child : > 相当于创建子标签 nav>ul>li <nav><ul><li>< ...

  6. MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)

    第一章 MySQL 一 .数据库 1.什么是数据库? 所谓的数据库就是指存储和管理数据的仓库 2.数据库有哪些分类? 3.什么是关系型数据库? 底层以二维表的形式保存数据的库就是关系型数据库 stu- ...

  7. JSTL标签和分页查询

    作用: 替换java脚本, 配合EL标签式, 执行在服务器端执行, 把jstl执行之后的结果响应给客户端浏览器, JSTL标签在Html标签之前执行 使用步骤: 1.导入jstl依赖: 2.在使用js ...

  8. jsp+ajax+servlet+sqlserver实现分页查询_SXT DAY063 分页

    分页技术 分页意义和实现思路 分页的作用 数据量大,一页容不下 后台查询部分数据而不是全部数据 降低带宽使用,提高访问速度 • 分页的实现思路 MVC四个层次都需要参与分页操作 理解PageBean ...

  9. javaweb的struts2的分页查询操作

    javaweb的struts2的分页查询操作 分页查询的实现: 1.利用action完成 action有成员变量: 除了实体对象的属性还有 // 分页显示 public int totalRecord ...

最新文章

  1. ElasticSearch 2 (38) - 信息聚合系列之结束与思考
  2. Cognos CFG-ERR-0103 无法启动 IBM Cognos 服务
  3. mysql sqlexception_c-很奇怪-mysql的sql :: SQLException未被其类型捕...
  4. 我们并没有觉得MapReduce速度慢,直到Spark出现
  5. linux make命令实现,Linux make命令主要参数详解
  6. 计算机视觉新范式: Transformer
  7. idea中,springboot项目部署到docker
  8. ASP.NET的视图(Razor)循环产生html代码
  9. vue如何在手机上查看vue-cli构建的项目
  10. Google+再曝漏洞!5250万用户信息恐泄露
  11. 安卓java游戏模拟器_java游戏模拟器安卓版下载
  12. Python:利用xlwt设置Excel单元格格式
  13. 【华为机试真题 Python实现】九宫格按键输入【2022 Q1 Q2 Q3 |200分】
  14. 程序员需要掌握的单词
  15. 大数据工程师面试考题
  16. 爬动的蠕虫(无循环版)
  17. SDIO WiFi调试经验总结
  18. 【学习】手写数字生成
  19. css中内编,CSS
  20. 2018结构、流体、热分析、多物理场耦合、电磁仿真计算特点与硬件配置方案分析

热门文章

  1. netsuite 数据集成_Java中带有NetSuite数据实体的对象关系映射(ORM)
  2. java 性能调优_Java性能调优调查结果(第三部分)
  3. 艾伦图灵_Java英雄:丹·艾伦
  4. java ssh客户端_简单的Java SSH客户端
  5. JUnit 5和Selenium –改善项目配置
  6. 为特使构建控制平面的指南-为可插入性构建
  7. Lambda运行时内部:窥视无服务器巢穴
  8. jta atomikos_带有Atomikos示例的Tomcat中的Spring JTA多个资源事务
  9. disruptor3_发布Disruptor 3.0.0
  10. permgen_打破PermGen神话