一、MVC实现分页
1、封装分页PageInfo类;
private int count;//总条数 ---------18 数据库(查询)
private int totalPage;//总页数 ----------4 算出来的 (计算)
private int rows=5;//每页显示行数 -------------5 自定义
private int currentPage=1;//当前页码 ---------1 前端
private List<UserInfo> list; // 内容---------数据库(查询)
2、底层数据:
1)获得总个数: SELECT count(1) from userinfo
2)当前页的数据: select * from userinfo limit 0,5
select * from userinfo limit 5,5
select * from userinfo limit 10,5
说明: 0=(当前页-1)*每页显示行数 =(1-1)*5 =0
5=每页显示行数
3、控制层 servlet
4、JSP 显示
二、效果如下图所示:
三、编写代码
PageInfo类
package com.sgj.util;
import com.sgj.entity.UserInfo;
import java.util.List;
/**
* @ClassName PageInfo
* @Description: TODO
* @Author 44401
* @Date 2020/3/27
* @Version V1.0
**/
public class PageInfo {
private int count;//总条数 ---------18 数据库(查询)
private int totalPage;//总页数 ----------4 算出来的 (计算)
private int rows=5;//每页显示行数 -------------5 自定义
private int currentPage=1;//当前页码 ---------1 前端
private List<UserInfo> list; // 内容---------数据库(查询)
//默认的构造方法
public PageInfo() {
}
/**
*
* @param count 总个数
* @param rows 每页显示的个数
* @param currentPage 当前页
* @param list 当前页数据
*/
public PageInfo(int count, int rows, int currentPage, List<UserInfo> list) {
this.count = count;
this.rows = rows;
this.currentPage = currentPage;
this.list = list;
}
public int getCount() {
return count;
}
/**
* 计算总页数 =总个数/每页显示的个数
* @return
*/
public void setCount(int count) {
this.count = count;
//计算
this.totalPage =(int)(Math.ceil(count/(double)rows));
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public List<UserInfo> getList() {
return list;
}
public void setList(List<UserInfo> list) {
this.list = list;
}
}
两个方法:
分页集合方法
@Override
public List<UserInfo> getPageInfo(PageInfo pageInfo) {
sql = "select * from userinfo limit ?,?";
//集合对象
List<UserInfo> list = new ArrayList<>();
//参数
Object[] obj = {(pageInfo.getCurrentPage()-1)*pageInfo.getRows(),pageInfo.getRows()};
//调用方法
ResultSet rs = this.executeSQL(sql,obj);
try {
//遍历
while (rs.next()) {
//封装对象
UserInfo user = new UserInfo(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getInt(6), rs.getInt(7));
//添加到集合
list.add(user);
}
} catch (Exception ex) {
ex.printStackTrace();
}finally {
this.closeResource(); //关闭
}
return list;
}
Servlet控制器
//查询分页
protected void findPageInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应编码
response.setContentType("text/html;charset=utf-8");
//输出对象
PrintWriter out = response.getWriter();
//具体操作//
//1.实例化业务对象
UserInfoService service =new UserInfoServiceImpl();
//获得当前页参数///
String str = request.getParameter("pageIndex");
//当前页 判断
int pageIndex=(str==null)?(1):(Integer.parseInt(str));
///
//2.调用方法
//总个数
int count = service.getCount();
//当前页
// int pageIndex=1;
//显示每页个数
int pageSize=5;
//封装PageInfo
PageInfo info = new PageInfo();
//设置总个数
info.setCount(count);
//当前页
info.setCurrentPage(pageIndex);
//显示每页个数
info.setRows(pageSize);
// System.out.println("总数==>"+info.getCount());
// System.out.println("总页数==>"+info.getTotalPage());
List<UserInfo> users= service.getPageInfo(info);
//3.保存数据
request.setAttribute("users",users);
//分页bean保存
request.setAttribute("pageinfo",info);
//4.跳转
request.getRequestDispatcher("userAll.jsp").forward(request,response);
// out.println();
//关闭
out.flush();
out.close();
}
其他的代码省略.......