以下是一个简单的实现示例,包括entity层、dao层和controller层的代码,并添加了必要的注释说明。\n\n实体类PageData:\njava\npublic class PageData<T> {\n private int totalPages; // 总页数\n private int pageSize; // 每页数据数量\n private int currentPage; // 当前页数\n private int totalDataCount; // 数据总数\n private List<T> currentPageDataList; // 当前页面的数据\n private int startIndex; // 每页的起始下标\n private int endIndex; // 每页的结束下标\n \n // 省略getter和setter方法\n}\n\n\nDAO层:\njava\npublic class UserDao {\n // 分页查询用户数据\n public PageData<User> getUsersByPage(int currentPage, int pageSize) {\n // 假设数据库表名为users\n String sql = "SELECT * FROM users LIMIT ?, ?";\n \n try (Connection conn = getConnection();\n PreparedStatement stmt = conn.prepareStatement(sql)) {\n \n // 计算每页的起始下标和结束下标\n int startIndex = (currentPage - 1) * pageSize;\n int endIndex = startIndex + pageSize;\n \n stmt.setInt(1, startIndex);\n stmt.setInt(2, pageSize);\n \n try (ResultSet rs = stmt.executeQuery()) {\n List<User> userList = new ArrayList<>();\n while (rs.next()) {\n User user = new User();\n // 从结果集中读取数据,并将数据封装到User对象中\n // ...\n userList.add(user);\n }\n \n // 查询总数据数量\n int totalDataCount = getTotalDataCount();\n \n // 计算总页数\n int totalPages = (int) Math.ceil((double) totalDataCount / pageSize);\n \n PageData<User> pageData = new PageData<>();\n pageData.setCurrentPage(currentPage);\n pageData.setPageSize(pageSize);\n pageData.setTotalPages(totalPages);\n pageData.setTotalDataCount(totalDataCount);\n pageData.setCurrentPageDataList(userList);\n pageData.setStartIndex(startIndex);\n pageData.setEndIndex(endIndex);\n \n return pageData;\n }\n } catch (SQLException e) {\n e.printStackTrace();\n return null;\n }\n }\n \n // 获取数据总数\n private int getTotalDataCount() {\n // 执行查询总数据数量的SQL语句\n // ...\n return 0; // 假设返回值为数据总数\n }\n \n // 获取数据库连接\n private Connection getConnection() {\n // 获取数据库连接的代码\n // ...\n return null; // 假设返回值为数据库连接\n }\n}\n\n\nController层(Servlet):\njava\n@WebServlet("/userList")\npublic class UserListServlet extends HttpServlet {\n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n int currentPage = 1; // 默认当前页数为1\n int pageSize = 15; // 每页数据数量\n \n // 获取页面传递的当前页数\n String currentPageStr = request.getParameter("currentPage");\n if (currentPageStr != null && !currentPageStr.isEmpty()) {\n currentPage = Integer.parseInt(currentPageStr);\n }\n \n UserDao userDao = new UserDao();\n PageData<User> pageData = userDao.getUsersByPage(currentPage, pageSize);\n \n request.setAttribute("pageData", pageData);\n request.getRequestDispatcher("userList.jsp").forward(request, response);\n }\n}\n\n\nJSP页面(userList.jsp):\njsp\n<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>User List</title></head><body><h1>User List</h1> <table><tr><th>ID</th><th>Name</th><th>Age</th><!-- 其他字段列 --></tr> <c:forEach var="user" items="${pageData.currentPageDataList}"><tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td><!-- 其他字段值 --></tr></c:forEach></table> <div><a href="${pageContext.request.contextPath}/userList?currentPage=${pageData.currentPage-1}">上一页</a> <c:forEach var="pageNum" begin="1" end="${pageData.totalPages}"><a href="${pageContext.request.contextPath}/userList?currentPage=${pageNum}">${pageNum}</a></c:forEach> <a href="${pageContext.request.contextPath}/userList?currentPage=${pageData.currentPage+1}">下一页</a></div></body></html>\n\n\n在这个示例中,通过UserDao的getUsersByPage方法实现了分页查询。在UserListServlet中获取当前页数和每页数据数量,并调用UserDao的方法获取分页数据。然后将获取到的PageData对象设置为请求属性,并将请求转发到userList.jsp页面进行展示。在userList.jsp中,使用JSTL的forEach标签遍历PageData中的currentPageDataList,将数据展示在表格中,并使用超链接实现上一页和下一页的跳转。

Java 分页查询实现:JDBC、Servlet、JSP、Entity、DAO和Controller详解

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

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