JSP核心——分页查询

业务背景

当数据量较多时,用户需要拖动页面才能浏览更多信息数据定位不便;采用分页技术实现批量数据的页面显示。例如百度搜索:

分页实现

①确定每页显示的数据数量
②确定分页显示所需的总页数
③编写SQL查询语句,实现数据查询
④在JSP页面中进行分页显示设置

编写实体类

public class Employee {private int employeeId;private String firstName;private String lastName;private String email;private String phoneNumber;private String jobId;private double salary;private double commissionPct;private int managerId;private int departmentId;private Date hiredate;//雇佣日期//省略getter、setter方法
}

编写工具类

PageUtil封装分页的数据。

package com.hanker.util;import java.util.List;public class PageUtils<T> {private int currPageNo = 1;//当前页private int pageSize  =10;//每页显示记录数private int totalCount;//总记录数private int totalPage;//总页数private List<T> data;//分页数据,泛型可以保存各种类型public int getCurrPageNo() {return currPageNo;}public void setCurrPageNo(int currPageNo) {this.currPageNo = currPageNo;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getTotalPage() {//计算总页码totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<T> getData() {return data;}public void setData(List<T> data) {this.data = data;}@Overridepublic String toString() {return "PageUtils [currPageNo=" + currPageNo + ", pageSize=" + pageSize + ", totalCount=" + totalCount+ ", totalPage=" + getTotalPage()  + ", data=" + data + "]";}
}

编写Dao层

Dao接口

package com.hanker.dao;
import java.util.List;
import com.hanker.entity.Employee;
import com.hanker.util.PageUtils;
public interface EmployeeDao {/*** 分页查询* @param pageIndex 第几页* @param pageSize 每页记录数* @return 当前页的数据*/PageUtils<Employee> findByPage(int pageIndex, int pageSize);/*** 查询总记录数* @return 总记录数*/long getCount();
}

Dao实现类

public class EmployeeDaoImpl implements EmployeeDao {private Connection conn;private PreparedStatement ps;private ResultSet rs;@Overridepublic PageUtils<Employee> findByPage(int pageIndex, int pageSize) {// 分页查询List<Employee> list = new ArrayList<Employee>();String sql = "select * from employees limit ?,?";try {conn = JdbcUtils.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, (pageIndex-1)* pageSize );ps.setInt(2, pageSize);rs = ps.executeQuery();while (rs.next()) {// 每次循环一行,创建一个新对象封装到eEmployee e = new Employee();e.setEmployeeId(rs.getInt(1));e.setFirstName(rs.getString("first_name"));e.setLastName(rs.getString(3));e.setEmail(rs.getString("email"));e.setPhoneNumber(rs.getString(5));e.setJobId(rs.getString("job_id"));e.setSalary(rs.getDouble("salary"));e.setCommissionPct(rs.getDouble(8));e.setManagerId(rs.getInt("manager_id"));e.setDepartmentId(rs.getInt(10));e.setHiredate(rs.getDate("hiredate"));//添加到集合list.add(e);}} catch (Exception e) {e.printStackTrace();}finally {JdbcUtils.close(conn, ps, rs);}PageUtils<Employee> page = new PageUtils<Employee>();//创建对象page.setCurrPageNo(pageIndex);//设置当前页page.setData(list);//页面数据page.setTotalCount((int)getCount());//设置总记录数page.setPageSize(pageSize);return page;}@Overridepublic long getCount() {int count  = -1 ;// 注意的问题删除的数据不能显示了;String sql = "select count(employee_id) from employees where status=0";try {conn = JdbcUtils.getConnection();ps = conn.prepareStatement(sql);rs = ps.executeQuery();if(rs.next()) {count = rs.getInt(1);}} catch (Exception e) {e.printStackTrace();}finally {JdbcUtils.close(conn, ps, rs);}return count;}}

编写业务层

业务接口

package com.hanker.service;import java.util.List;import com.hanker.entity.Employee;
import com.hanker.util.PageUtils;public interface EmpployeeService {/*** 分页查询* @param pageIndex 第几页* @param pageSize 每页记录数* @return 当前页的数据*/PageUtils<Employee> findByPage(int pageIndex,int pageSize);/*** 获取总记录数:删除后的数据没有必要显示了 * @return 总记录数*/long getCount();
}

业务实现类

package com.hanker.service.impl;import java.util.List;import com.hanker.dao.EmployeeDao;
import com.hanker.dao.impl.EmployeeDaoImpl;
import com.hanker.entity.Employee;
import com.hanker.service.EmpployeeService;
import com.hanker.util.PageUtils;
//业务层调用Dao层 重点是在业务层控制事务
public class EmployeeServiceImpl implements EmpployeeService{private EmployeeDao employeeDao = new EmployeeDaoImpl();@Overridepublic PageUtils<Employee> findByPage(int pageIndex, int pageSize) {return employeeDao.findByPage(pageIndex, pageSize);}@Overridepublic long getCount() {return employeeDao.getCount();}
}

编写Web层

<%@page import="com.hanker.util.PageUtils"%>
<%@page import="com.hanker.entity.Employee"%>
<%@page import="java.util.List"%>
<%@page import="com.hanker.dao.impl.EmployeeDaoImpl"%>
<%@page import="com.hanker.dao.EmployeeDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工列表</title>
<style type="text/css">
table,tr,td{border: 1px solid #000;border-collapse: collapse;/*合并单元格边框*/
}
</style>
</head>
<body>
<%
String pageIndex = request.getParameter("pageIndex");
if(pageIndex == null) pageIndex="1";
int pageSize  =10;//每页记录数
EmployeeDao empDao = new EmployeeDaoImpl();
PageUtils<Employee> pageUtils = empDao.findByPage(Integer.parseInt(pageIndex), pageSize);
List<Employee> list  =pageUtils.getData();//获取当前页面的数据
%><h1 align="center">员工列表</h1><table style="width: 90%;margin: 0px auto;"><tr><td colspan="12"><a href="emp_add.jsp">添加</a></td></tr><tr><td>员工编号</td><td>员工名字</td><td>员工姓氏</td><td>电子邮箱</td><td>电话号码</td><td>工作编号</td><td>员工薪水</td><td>员工奖金</td><td>经理编号</td><td>部门编号</td><td>雇佣日期</td><td>操作按钮</td></tr><%for(int i=0,j=list.size(); i<j; i++){Employee e = list.get(i);//从集合中取出一个对象%><tr><td><%=e.getEmployeeId() %></td><td><%=e.getFirstName() %></td><td><%=e.getLastName() %></td><td><%=e.getEmail()%></td><td><%=e.getPhoneNumber()%></td><td><%=e.getJobId()%></td><td><%=e.getSalary()%></td><td><%=e.getCommissionPct()%></td><td><%=e.getManagerId()%></td><td><%=e.getDepartmentId()%></td><td><%=e.getHiredate()%></td><td><a href="emp_delete.jsp?id=<%=e.getEmployeeId() %>">删除</a><a href="emp_update.jsp?id=<%=e.getEmployeeId() %>">修改</a><a href="#">订单</a></td></tr><%} //注意:for的结束大括号%><tr><td colspan="12"><a href="emp_list_page.jsp?pageIndex=1">第一页</a><a href="emp_list_page.jsp?pageIndex=<%=pageUtils.getCurrPageNo()>1 ? pageUtils.getCurrPageNo() - 1 : 1 %>">上一页</a><a href="emp_list_page.jsp?pageIndex=<%=pageUtils.getCurrPageNo()<pageUtils.getTotalPage() ?pageUtils.getCurrPageNo() +1 : pageUtils.getTotalPage() %>">下一页</a><a href="emp_list_page.jsp?pageIndex=<%=pageUtils.getTotalPage() %>">最后一页</a>第<%=pageUtils.getCurrPageNo() %>页/共<%=pageUtils.getTotalPage() %>页</td></tr></table>
</body>
</html>

SQL脚本

/*Navicat Premium Data TransferSource Server         : mysqlSource Server Type    : MySQLSource Server Version : 50710Source Host           : localhostSource Database       : myemployeesTarget Server Type    : MySQLTarget Server Version : 50710File Encoding         : utf-8Date: 04/02/2020 21:26:59 PM
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
--  Table structure for `employees`
-- ----------------------------
DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (`employee_id` int(6) NOT NULL AUTO_INCREMENT,`first_name` varchar(20) DEFAULT NULL,`last_name` varchar(25) DEFAULT NULL,`email` varchar(25) DEFAULT NULL,`phone_number` varchar(20) DEFAULT NULL,`job_id` varchar(10) DEFAULT NULL,`salary` double(10,2) DEFAULT NULL,`commission_pct` double(4,2) DEFAULT NULL,`manager_id` int(6) DEFAULT NULL,`department_id` int(4) DEFAULT NULL,`hiredate` datetime DEFAULT NULL,`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1删除 2停用)',PRIMARY KEY (`employee_id`) USING BTREE,KEY `dept_id_fk` (`department_id`) USING BTREE,KEY `job_id_fk` (`job_id`) USING BTREE,CONSTRAINT `dept_id_fk` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`),CONSTRAINT `job_id_fk` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=gb2312 ROW_FORMAT=COMPACT;SET FOREIGN_KEY_CHECKS = 1;

测试效果

JSP核心——分页查询相关推荐

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

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

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

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

  3. 【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服务器中的 ...

  4. 分页查询的实现(struts2+jsp+jstl+el)

    文章目录 MySQL的分页查询语句 如何设置<上一页>和<下一页>的有效性呢? 示例代码 MySQL的分页查询语句 使用 MySQL 的分页查询语句 select * from ...

  5. jsp import mysql con_jsp的分页查询的代码(mysql数据库)

    [原来没有写过,听朋友说,比较难,就试一下,还是挺简单的,只不过,具体实用方面还得自己写,没有什么难的,自己看看就懂了.bean文件:package bean;/** * jsp+java bea 这 ...

  6. jsp mysql模板_jsp的分页查询的代码(mysql数据库)

    推荐:JSP的MYSQL数据库的代码最近研究了jsp的数据库操作问题.本来我是要拿oracle数据库来测试的.但是由于机子的内存限制,就换成了mysql数据库了. 第一次用jsp编数据库的连接,发现问 ...

  7. Jsp新闻项目(规范访问分页之模糊查询主题分页查询[客户页面])

    目录 一.规范访问 二.模糊查询分页 1.代码分析 上一章我们有讲到将伪表查询代替之前的模糊查询来进行分页,今天我们要在伪表查询的基础上加上模糊查询,也就是说在模糊查询时也可以分页了 三.主题分页查询 ...

  8. android tab切换菜单内容分页,8月23号   Tab菜单页面切换和jsp分页查询

    android ViewPager实现App主界面Tab菜单页面切换和点击事件 首先需要创建3个.xml文件,简单设置背景和一些简单组件,tab1.xml,tab2.xml,tab3.xml 之后是对 ...

  9. java里ssm框架分页代码_SSM框架实现分页查询例子

    [实例简介] SSM框架实现分页查询例子,对应博客地址https://blog.csdn.net/sinat_37001576 [实例截图] [核心代码] SSM-Project └── SSM-Pr ...

最新文章

  1. svn删除用户名及密码
  2. 连接redis的linux命令,redis常见操作命令
  3. python 0o-377 -0o377_Python : 反射
  4. c# emnu 获取注释_C#教程推荐
  5. qpython执行手机脚本精灵使用教程_Android上执行python脚本-QPython
  6. java请求注释_求达人给java代码【注释】!!请求尽量详细,万分感谢!!
  7. subprocss模块
  8. bada 2D游戏编程之一——图形绘制
  9. outlook 表格使用技巧
  10. Json文件转Map(二)之解析节点
  11. could't excute 请求的操作需要提升 win32 error 740
  12. 微信小程序-视频弹幕的项目
  13. 【驻油点】一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车一次是过不了沙漠的。因此司机必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问司机如何建
  14. 关于学习渲染的心得第一篇
  15. Python中的Monkey Patching (猴子补丁)
  16. Vue前端框架的使用
  17. 保险IT从业者必须知道 的健康险
  18. 能源结构优化与低碳化发展:低碳化指数-全国分地区能源消费结构
  19. 免费ddns f3322.net使用脚本更新公网ip小记
  20. SWC_RTE02-AutoSAR架构【AutoSAR架构设计概述2】

热门文章

  1. 面向Python开发人员的综合置信区间全面理解
  2. 禁止Win系统自动唤醒
  3. twitter点赞图标分析
  4. 依存分析:基于序列标注的中文依存句法分析模型实现
  5. 从mysql2ch到synch,一次重构与升级
  6. 报告老板,我们的H5页面在iOS11系统上白屏了!
  7. 有哪些高质量的英文有声书 audiobook?
  8. Openssh更新升级7.9p1步骤
  9. no transaction is in progresss
  10. 小案例之点击网页任意位置出现小爱心