Java分页查询

概念

分页是Web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数 据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间设置每页显示若干行,比如一般20 行是一个比较理想的显示状态。

分页实现思路

对于海量的数据查询,需要多少就取多少,显然是最佳的解决方法,假如某个表中有200万条记录, 第一页取前20条,第二页取21~40条记录。

select * from 表名 limit 0,10;//第一页
select * from 表名 limit 10,10;//第二页
select * from 表名 limit 20,10;//第三页

分页代码实现

PageBean

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean<T> { //分页所需的数据
private Integer pageNum; //当前页码
private Integer pageSize;//每一页的条数
private Integer totalSize;//总条数
private Integer totalPage;//总页数
private T data; //每一页的数据
}

EmpDaoImpl

@Override
public long selectCount() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
return qr.query("select count(*) from emp",new ScalarHandler<Long>());
}
@Override
public int insertEmp(Emp emp) throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into emp
(empno,ename,job,mgr,hiredate,sal,comm,deptno,image) values (?,?,?,?,?,?,?,?,?)";
Object[] args =
{emp.getEmpno(),emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getS
al(),emp.getComm(),emp.getDeptno(),emp.getImage()};
return qr.update(JDBCUtils.getConnection(),sql,args);
}

EempService

@Override
public PageBean getAllEmp(String pageNum,String pageSize) {
try {
int pNum = 1;
if(pageNum != null){
pNum = Integer.parseInt(pageNum);
}
int pSize = 3;
if(pageSize != null){
pSize = Integer.parseInt(pageSize);
}
//调用Dao层方法查询数据
//每一页的数据
List<Emp> empList = empDao.selectEmpLimit(pNum, pSize);
//总条数
int totalSize = (int) empDao.selectCount();
//总页数
int totalPage = totalSize % pSize == 0 ? totalSize / pSize : totalSize /
pSize + 1;
//将数据封装到pageBean中
PageBean pageBean = new PageBean(pNum,pSize,totalSize,totalPage,empList);
return pageBean;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}

EmpServlet

@WebServlet("/empAll.do")
public class EmpAllServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
//1、处理请求
String pageNum = req.getParameter("pageNum");
String pageSize = req.getParameter("pageSize");
//2、调用业务层service方法
EmpService empService = new EmpServiceImpl();
PageBean pageBean = empService.getAllEmp(pageNum, pageSize);
//3、做出响应 转发到empList.jsp页面
req.setAttribute("pageBean",pageBean);
req.getRequestDispatcher("/empList.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
doGet(req,resp);
}
}

empList.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>欢迎${userLogin.username}登录中 <a href="logout.do">退出登录</a> <span
id="time"></span></h3>
<h3><a href="addEmp.jsp">添加员工</a></h3>
<table width="80%" border="1px" cellspacing="0px" cellpadding="10px"
align="center" bgcolor="#deb887">
<c:if test="${pageBean.data == null}">
暂无员工信息
</c:if>
<c:if test="${pageBean.data != null}">
<tr>
<th>员工编号</th>
<th>员工头像</th>
<th>员工姓名</th>
<th>员工职位</th>
<th>员工经理</th>
<th>入职日期</th>
<th>员工工资</th>
<th>员工绩效</th>
<th>部门编号</th>
<th>操作</th>
</tr>
<c:forEach items="${pageBean.data}" var="emp">
<tr>
<td>${emp.empno}</td>
<td>
<c:if test="${emp.image == null}"><img
src="${pageContext.request.contextPath}/upload/8.jpg" width="100px" height="100px">
</c:if>
<c:if test="${emp.image != null}"> <img
src="${pageContext.request.contextPath}/upload/${emp.image}" width="100px"
height="100px"></c:if>
</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.mgr}</td>
<td>${emp.hiredate}</td>
<td>${emp.sal}</td>
<td>${emp.comm == null ? "无" : emp.comm}</td>
<td>${emp.deptno}</td>
<td><a href="#">删除</a>&nbsp;&nbsp;&nbsp;<a href="#">修改</a>
</td>
</tr>
</c:forEach>
<tr align="center">
<td colspan="10" >
<%-- 分页 --%>
<%-- 上一页 --%>
<c:if test="${pageBean.pageNum != 1}">
<a href="empAll.do?pageNum=${pageBean.pageNum1}&pageSize=${pageBean.pageSize}">上一页</a>
</c:if>
<c:forEach begin="1" end="${pageBean.totalPage}"
varStatus="status">
<c:if test="${status.index == pageBean.pageNum}">
<a>${status.index}</a></c:if>
<c:if test="${status.index != pageBean.pageNum}"> <a
href="empAll.do?
pageNum=${status.index}&pageSize=${pageBean.pageSize}">${status.index}</a></c:if>
</c:forEach>
<%-- 下一页 --%>
<c:if test="${pageBean.pageNum != pageBean.totalPage}">
<a href="empAll.do?
pageNum=${pageBean.pageNum+1}&pageSize=${pageBean.pageSize}">下一页</a>
</c:if>
当前在<input id="pageInput" type="number"
value="${pageBean.pageNum}" style="width: 50px;"><button
onclick="gotoPage(${pageBean.pageSize},${pageBean.totalPage})">跳转</button>,
总共:${pageBean.totalPage}页。每一页
<select onchange="changePageSize()" id="pageSelect">
<option <c:if
test="${pageBean.pageSize==3}">selected</c:if> >3</option>
<option <c:if
test="${pageBean.pageSize==5}">selected</c:if> >5</option>
<option <c:if
test="${pageBean.pageSize==10}">selected</c:if> >10</option>
</select>
</td>
</tr>
</c:if>
</table>
<script>
function changePageSize(){
var pageSize = document.getElementById("pageSelect").value;
location.href = "empAll.do?pageNum=1&pageSize="+pageSize;
}
function gotoPage(pageSize,totalPage){
var pageNum = document.getElementById("pageInput").value;
if(pageNum > 0 && pageNum <= totalPage){
location.href = "empAll.do?pageNum="+pageNum+"&pageSize="+pageSize;
}else{
alert("页码超过了范围");
}
}
var time = formatTime();
var span = document.getElementById("time");
span.innerHTML = time;
//定时任务
setInterval(function(){
var time = formatTime();
span.innerHTML = time;
},1000);
function formatTime(){
//获取系统当前时间
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1 < 10 ? "0"+(date.getMonth()+1) :
date.getMonth()+1;
var day = date.getDate() < 10 ? "0"+date.getDate() : date.getDate();
var hours = date.getHours() < 10 ? "0"+ date.getHours():
date.getHours();
var minutes = date.getMinutes() < 10 ?
"0"+date.getMinutes():date.getMinutes();
var seconds = date.getSeconds()
<10?"0"+date.getSeconds():date.getSeconds();
return year + "-" + month + "-" + day + " " + hours + ":" + minutes +
":" + seconds;
}
</script>
</body>
</html>
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是二次元穿越来的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值