JSP实现分页查询

您所在的位置:网站首页 数据库查询结果分页 JSP实现分页查询

JSP实现分页查询

2024-06-11 02:10| 来源: 网络整理| 查看: 265

JSP实现分页查询 1. 分页查询准备工作2. 分页查询逻辑实现

分页查询

1. 分页查询准备工作

采用物理查询:页面查询一页,就从数据库里查询一页数量的数据。 优:减少单次查询数据库的时间 缺:增加了操作数据库的次数

所需的关于 页数 的数据: 请求:当前页数 currentPage 响应:PageBean 类封装 ● 当前页数 currentPage ● 总页数 totalPage ● 总记录数 totalSize ● 每页记录数 pageSize ● 当前页数据 pageList

总页数 = (总记录数 % 每页记录数 == 0) ? (总记录数 / 每页记录数) : (总记录数 / 每页记录数 + 1); 当前页数据 list = query( select * from limit 每页记录数*(当前页数-1), 每页记录数 );

2. 分页查询逻辑实现

效果图: 分页查询效果图

数据层封装 Employee.java(属性+生成即可) 和 PageBean.java:

public class PageBean { private Integer currentPage; // 当前页数 private Integer totalPage; // 总页数 private Integer totalSize; // 总记录数 private Integer pageSize; // 每页记录数 private List list; // 当前页数据 针对哪种数据 ... }

显示层:userList.jsp

ID 姓 名 Email 电话 入职日期 工号 工资 上级ID 部门ID ${employee.EMPLOYEE_ID} ${employee.FIRST_NAME} ${employee.LAST_NAME} ${employee.EMAIL} ${employee.PHONE_NUMBER} ${employee.HIRE_DATE} ${employee.JOB_ID} ${employee.SALARY} ${employee.MANAGER_ID} ${employee.DEPARTMENT_ID} 第${pageBean.currentPage}/${pageBean.totalPage}页 总记录数:${pageBean.totalSize}条 每页${pageBean.pageSize}条 [首页] [上一页] [下一页] [尾页]

通用 BaseServlet 和 对应 UserServlet 资源逻辑:

@WebServlet(name = "UserServlet", urlPatterns = "/user") public class UserServlet extends BaseServlet { private EmployeeService employeeService = new EmployeeServiceImpl(); public Integer getCurrentPage(String currentPagestr) { if (null == currentPagestr) { currentPagestr = "1"; } return Integer.valueOf(currentPagestr); } public String selectUserListByPage(HttpServletRequest request, HttpServletResponse response) { String currentPageStr = request.getParameter("currentPage"); Integer currentPageNum = getCurrentPage(currentPageStr); PageBean pageBean = null; try { pageBean = employeeService.selectUserListByPage(currentPageNum); request.setAttribute("pageBean", pageBean); return "/userList.jsp"; } catch (SQLException e) { e.printStackTrace(); } return "/index.jsp"; } } @WebServlet(name = "BaseServlet", urlPatterns = "/base") public class BaseServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String methodName = request.getParameter("methodName"); System.out.println("BaseServlet methodName=" + methodName); try { Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); String returnValue = (String) Objects.requireNonNull(method).invoke(this, request, response); if (null != returnValue) { // 资源跳转 int index = returnValue.lastIndexOf(":"); if (-1 == index) { // 没有":" 转发 request.getRequestDispatcher(returnValue).forward(request, response); } else { // 有":" String path = returnValue.substring(index + 1); if (returnValue.startsWith("redirect")) { response.sendRedirect(request.getContextPath() + path); } else if (returnValue.startsWith("forward")) { request.getRequestDispatcher(path).forward(request, response); } } } } catch (Exception e) { e.printStackTrace(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }

业务层:EmployeeServiceImpl.java

public class EmployeeServiceImpl implements EmployeeService { private EmployeeDao employeeDao = new EmployeeDaoImpl(); @Override public PageBean selectUserListByPage(Integer currentPage) throws SQLException { PageBean pageBean = new PageBean(); // 当前页数 pageBean.setCurrentPage(currentPage); // 总记录数 Integer totalSize = employeeDao.getTotalSize(); pageBean.setTotalSize(totalSize); // 每页记录数 Integer pageSize = 10; pageBean.setPageSize(pageSize); // 总页数(没余数为整页,有余数页数+1) Integer totalPages = (totalSize%pageSize==0) ? (totalSize/pageSize) : (totalSize/pageSize+1); pageBean.setTotalPage(totalPages); // 当前页数据 List list = employeeDao.queryAllByLimit(pageSize*(currentPage-1), pageSize); pageBean.setList(list); return pageBean; } }

持久层:EmployeeDaoImpl.java

public class EmployeeDaoImpl implements EmployeeDao { private QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource()); @Override public List queryAllByLimit(int offset, int limit) throws SQLException { return queryRunner.query( "select * from t_employees limit " + offset + "," + limit, new BeanListHandler(Employee.class) ); } @Override public Integer getTotalSize() throws SQLException { return queryRunner.query( "select count(*) from t_employees", new ScalarHandler() ).intValue(); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3