以下是一个实现分页查询的示例代码:\n\n1. Entity层:创建一个名为PageData的实体类,包含总页数、每页数据数量、当前页数、数据总数、当前页面的数据等属性。\n\njava\npublic class PageData<T> {\n private int totalPages;\n private int pageSize;\n private int currentPage;\n private int totalRecords;\n private List<T> currentPageDataList;\n private int startIndex;\n private int endIndex;\n\n // 省略getter和setter方法\n}\n\n\n2. DAO层:编写一个通用的分页查询方法。\n\njava\npublic class YourEntityDao {\n // 数据库连接\n private Connection connection;\n\n // 分页查询方法\n public <T> PageData<T> getPageData(String sql, int pageSize, int currentPage, RowMapper<T> rowMapper) throws SQLException {\n PreparedStatement preparedStatement = null;\n ResultSet resultSet = null;\n try {\n // 查询总记录数\n String countSql = "SELECT COUNT(*) FROM (" + sql + ") AS total";\n preparedStatement = connection.prepareStatement(countSql);\n resultSet = preparedStatement.executeQuery();\n resultSet.next();\n int totalRecords = resultSet.getInt(1);\n\n // 计算总页数\n int totalPages = (int) Math.ceil((double) totalRecords / pageSize);\n\n // 计算当前页面的起始和结束下标\n int startIndex = (currentPage - 1) * pageSize;\n int endIndex = currentPage * pageSize;\n\n // 执行分页查询\n String pageSql = "SELECT * FROM (" + sql + ") AS page LIMIT ?, ?";\n preparedStatement = connection.prepareStatement(pageSql);\n preparedStatement.setInt(1, startIndex);\n preparedStatement.setInt(2, pageSize);\n resultSet = preparedStatement.executeQuery();\n\n // 将查询结果封装到PageData对象中\n List<T> currentPageDataList = new ArrayList<>();\n while (resultSet.next()) {\n T obj = rowMapper.mapRow(resultSet);\n currentPageDataList.add(obj);\n }\n\n PageData<T> pageData = new PageData<>();\n pageData.setTotalPages(totalPages);\n pageData.setPageSize(pageSize);\n pageData.setCurrentPage(currentPage);\n pageData.setTotalRecords(totalRecords);\n pageData.setCurrentPageDataList(currentPageDataList);\n pageData.setStartIndex(startIndex);\n pageData.setEndIndex(endIndex);\n\n return pageData;\n } finally {\n // 关闭资源\n if (resultSet != null) {\n resultSet.close();\n }\n if (preparedStatement != null) {\n preparedStatement.close();\n }\n }\n }\n}\n\n\n3. Controller层:在Servlet中调用DAO层的分页查询方法,并将查询结果存入请求属性中,然后将请求转发到JSP页面。\n\njava\npublic class YourServlet extends HttpServlet {\n private YourEntityDao entityDao;\n\n @Override\n public void init() throws ServletException {\n // 初始化数据库连接等操作\n }\n\n @Override\n protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {\n int pageSize = 15; // 每页数据数量\n int currentPage = Integer.parseInt(req.getParameter("page")); // 当前页数\n String sql = "SELECT * FROM your_table"; // 查询语句\n\n try {\n // 调用DAO层的分页查询方法\n PageData<YourEntity> pageData = entityDao.getPageData(sql, pageSize, currentPage, new YourEntityRowMapper());\n\n // 将查询结果存入请求属性中\n req.setAttribute("pageData", pageData);\n\n // 转发请求到JSP页面\n RequestDispatcher dispatcher = req.getRequestDispatcher("/your_jsp.jsp");\n dispatcher.forward(req, resp);\n } catch (SQLException e) {\n e.printStackTrace();\n // 处理异常\n }\n }\n}\n\n\n4. JSP页面:在JSP页面中使用EL表达式获取分页查询结果,并展示在页面上。\n\njsp\n<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>\n<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset="UTF-8">\n <title>分页查询结果</title>\n</head>\n<body>\n <h1>分页查询结果</h1>\n\n <table>\n <thead>\n <tr>\n <th>字段1</th>\n <th>字段2</th>\n <!-- 其他字段 -->\n </tr>\n </thead>\n <tbody>\n <c:forEach var="yourEntity" items="${pageData.currentPageDataList}">\n <tr>\n <td>${yourEntity.field1}</td>\n <td>${yourEntity.field2}</td>\n <!-- 其他字段 -->\n </tr>\n </c:forEach>\n </tbody>\n </table>\n\n <div>\n <!-- 分页导航栏 -->\n <c:choose>\n <c:when test="${pageData.totalPages > 1}">\n <c:forEach var="i" begin="1" end="${pageData.totalPages}">\n <c:choose>\n <c:when test="${i == pageData.currentPage}">\n <span>${i}</span>\n </c:when>\n <c:otherwise>\n <a href="?page=${i}">${i}</a>\n </c:otherwise>\n </c:choose>\n </c:forEach>\n </c:when>\n </c:choose>\n </div>\n</body>\n</html>\n\n\n以上代码实现了通过JDBC连接数据库进行分页查询,并在JSP页面中展示查询结果。在DAO层的getPageData方法中,通过预处理语句执行分页查询,并使用RowMapper接口将查询结果封装到实体类中。在Servlet中调用DAO层的方法,并将查询结果存入请求属性中,然后将请求转发到JSP页面。在JSP页面中使用EL表达式获取分页查询结果,并展示在页面上。分页导航栏根据总页数动态生成页码链接,点击链接可以切换到对应的页数。\n

JDBC 分页查询:Java Servlet 和 JSP 实现数据展示与分页导航

原文地址: https://www.cveoy.top/t/topic/p6pY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录