分页查询功能

分页:select * from 表名 limit ?,?;(第一个?是查询的其实位置《(当前页数-1)*每页显示的数据量》,第二个?是查询的数据条数)


传递两个参数 : 当前页数(pageCode  由页面传递过来) 、每页显示的数据条数(pageSize 有自己设定)
另一个必要数据量:  总数据量(totalRecord 利用数据库查询语句查询)


再根据当前页数算出上一页,下一页等参数
利用总数据量来得出总页数:总数据量/每页的数据量


利用封装javabean的方法将页数和查询出来的结果集封装到一起,便于在展示页面调用 ${实体类名.属性名}


实体类层、dao层、service层、servlet层依次进行开发

实体层:
构建pageCode(当前页码),pageSize(每页数据条数),totalPage(总页数),totalRecord(总数据条数),userList(数据结果集)的实体类

public class PageBean {
private int pageCode;//当前页码
private int pageSize;//每页数据条数
private int totalPage;//总页数
private int totalRecord;//总数据条数

private List<Map<String,Object>> userList;//用来存储查询出来的结果集

public int getPageCode() {
return pageCode;
}

public void setPageCode(int pageCode) {
this.pageCode = pageCode;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public int getTotalRecord() {
return totalRecord;
}

public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}

public List<Map<String, Object>> getUserList() {
return userList;
}

public void setUserList(List<Map<String, Object>> userList) {
this.userList = userList;
}
}

 dao层:

写一个分页查询方法的接口:

public interface IUserDao {
public PageBean findByPage(int pageCode, int pageSize);
}

然后对这个接口进行实现:

public class UserDaoImpl implements IUserDao {
//pageCode是当前页码数
//pageSize是页面显示的条数
@Override
public PageBean findByPage(int pageCode, int pageSize) {
PageBean pg=new PageBean();
String sql="select * from user limit ?,?";
//根据pageCode和pageSize计算出limit的参数
//第一个?是查询的起始位,用当前页码减一再乘每页的显示的条数
int firstRow=(pageCode-1)*pageSize;
//第二个?是每次查询的数据条数
int secondRow=pageSize;
//调用DButils中的查询方法,查询出来结果集
System.out.println(firstRow+" "+secondRow);
List<Map<String, Object>> maps = DButils.executeQuery(sql,firstRow,secondRow);
System.out.println("分页查询数据...............");
System.out.println(maps);
//将结果集合添加到PageBean中
pg.setUserList(maps);


//查询一下表中总数据量
String sql2="select count(*) as num from user";
List<Map<String, Object>> maps1 = DButils.executeQuery(sql2);
System.out.println("总数据量 "+maps1);
int totalRecord=0;
if(maps1!=null&&maps1.size()>0){
// int totalPage =(int) maps1.get(0).get("num"); java中默认从map中查找出来的数据是lang型,无法向下转为int
totalRecord = Integer.parseInt(maps1.get(0).get("num") + "");
System.out.println("总数据量"+totalRecord);
}
//计算出总页数
int totalPage=totalRecord%secondRow==0?totalRecord/secondRow:totalRecord/secondRow+1;
System.out.println("总页数"+totalPage);
pg.setPageCode(pageCode);
pg.setTotalPage(totalPage);
pg.setPageSize(pageSize);
return pg;
}
}

service层:

写分页查询的接口和实现类:

接口:

import com.aaa.entity.PageBean;

public interface IUserService {
public PageBean findByPage(int pageCode, int pageSize);
}

实现类:

import com.aaa.dao.IUserDao;
import com.aaa.dao.UserDaoImpl;
import com.aaa.entity.PageBean;
import com.aaa.service.IUserService;

public class UserServiceImpl implements IUserService {
private IUserDao userDao=new UserDaoImpl();
@Override
public PageBean findByPage(int pageCode, int pageSize) {
return userDao.findByPage(pageCode,pageSize);
}
}

servlet层:

@WebServlet("/PS")
public class PageServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入分页servlet");
String pageC = req.getParameter("pageCode");
int pageCode=1;//第一次登录系统默认第一页
if(pageC!=null&&pageC.trim().length()>0){
pageCode=Integer.parseInt(pageC);
}
//赋值给pageSize,每页显示的数据数量
int pageSize=3;
IUserService userService = new UserServiceImpl();
PageBean byPage = userService.findByPage(pageCode, pageSize);
System.out.println(byPage);
req.setAttribute("users",byPage);
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}

前端页面显示:

<%@ 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>
<p>用户信息展示</p>
<table border="1px">
<tr>
<td>序号</td>
<td>用户名</td>
<td>电话</td>
<td>昵称</td>
</tr>
<c:forEach items="${users.userList}" var="user" varStatus="i">
<tr>
<td>${i.index+1}</td>
<td>${user.username}</td>
<td>${user.telephone}</td>
<td>${user.nickname}</td>
</tr>
</c:forEach>
</table>
${users.pageCode}页/共${users.totalPage}页
<a href="<c:url value="/PS?pageCode=1"/>">首页</a>
<c:if test="${users.pageCode>1}">
<a href="<c:url value="/PS?pageCode=${users.pageCode-1}"/>">上一页</a>
</c:if>
<c:if test="${users.pageCode<users.totalPage}">
<a href="<c:url value="/PS?pageCode=${users.pageCode+1}"/>">下一页</a>
</c:if>
<a href="<c:url value="/PS?pageCode=${users.totalPage}"/>">尾页</a>
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/fbbg/p/11106501.html