1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录;
2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大,数据就要很多,而我们所需的记录又很少,不使用分页,查看起来那么繁琐,而且一不小心容易看着眼花。使用数据分页,就行书本一样,有页数,一目了然。相当简洁。
3.核心sql语句:SELECT * FROM stud LIMIT m,n ————m表示要显示的页数,n表示显示的记录行数
4.核心思想:
总行数(rows): select count(1) from stud;每页显示的行数(PAGE_SIZE): 固定值---已知的一个常量页数: pageSize= num/n + (num%n==0)?0:1 当前页号: currentPage当前要显示的页面数据的起始行号和终止行号 :startRow: (currentPage-1)*pageSize如何显示从startN开始的pageSize条记录 select * from stud limit startN, pageSize;当前显示的开始页号:showStart=currentPage-showSize/2;当前显示的结束页号:showEnd=showStart+showSize-1;模糊查询:select count(*) from stud where 1=1 and........5.成果图:
6.代码实现
需要的包和配置文件:
myConUtil.jar----自己写的c3p0pool工具类commons-dbutils-1.4.jarmysql-connector-java-5.1.34-bin.jarc3p0-0.9.1.2.jarc3p0-config.xml<%@ import="java.util.*" language="java" page="" pageencoding="UTF-8"><%@taglib prefix="c" uri="java.sun/jsp/jstl/core">
table.css
table{color: green;border: 1px solid blue;border-collapse: collapse;width:500px;margin: auto;}td{border: 1px solid blue;}th{border: 1px solid blue;}body{text-align: center;}
PageServlet.java
package cn.hncu.page1.servlet;import java.io.IOException;import java.sql.SQLException;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.hncu.page1.domain.Stud;import cn.hncu.page1.service.IPageService;import cn.hncu.page1.service.PageService;public class PageServlet extends HttpServlet {private IPageService service=new PageService();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//这里是搜索区域的操作Stud stud=null;if(request.getMethod().equals("POST")){if (stud==null) {stud = new Stud();}String serachId = request.getParameter("serachId");String serachName = request.getParameter("serachName");stud.setId(serachId);stud.setName(serachName);request.getSession().setAttribute("stud", stud);}else{stud=(Stud) request.getSession().getAttribute("stud");if (stud==null) {stud = new Stud();}}//封装studs对象int currentPage=1;try {currentPage = Integer.parseInt(request.getParameter("page"));} catch (NumberFormatException e) {currentPage=1;}Mapmap=null;try {map=service.query(currentPage,stud);} catch (SQLException e) {e.printStackTrace();}map.put("currentPage", currentPage);//显示滚动页号int showStart=0;//从第几个页号开始显示int showEnd=0;//从第几个页号结束显示int showSize=10;//显示多少页数int pageCount=Integer.parseInt(""+map.get("pageCount"));if(showSize>pageCount){//显示页数大于于总页数showStart=1;showEnd=pageCount;}else{if(currentPage<=showSize/2){showStart=1;showEnd=showSize;}else{showStart=currentPage-showSize/2;showEnd=showStart+showSize-1;}}if(showEnd>pageCount){showEnd=pageCount;showStart=showEnd-showSize;}map.put("showStart", showStart);map.put("showEnd", showEnd);request.setAttribute("map", map);request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);}}
IPageService.java
package cn.hncu.page1.service;import java.sql.SQLException;import java.util.Map;import cn.hncu.page1.domain.Stud;public interface IPageService {public Mapquery(int currentPage, Stud stud) throws SQLException;}
package cn.hncu.page1.service;import java.sql.SQLException;import java.util.Map;import cn.hncu.page1.dao.PageDao;import cn.hncu.page1.dao.PageDaoJdbc;import cn.hncu.page1.domain.Stud;public class PageService implements IPageService{ private PageDao dao=new PageDaoJdbc(); @Override public Mapquery(int currentPage, Stud stud) throws SQLException { return dao.query(currentPage,stud); } }
package cn.hncu.page1.dao;import java.sql.SQLException;import java.util.Map;import cn.hncu.page1.domain.Stud;public interface PageDao {public Mapquery(int currentPage, Stud stud) throws SQLException;}
package cn.hncu.page1.dao;import java.sql.SQLException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.sql.DataSource;import org.apachemons.dbutils.QueryRunner;import org.apachemons.dbutils.handlers.MapListHandler;import org.apachemons.dbutils.handlers.ScalarHandler;import org.junit.Test;import cn.hncu.page1.domain.Stud;import cn.hncu.page1.service.IPageService;import cn.hncu.pool.C3p0Pool;public class PageDaoJdbc implements PageDao{private static final int PAGE_SIZE=10;@Overridepublic Mapquery(int currentPage, Stud stud) throws SQLException {Map map=new HashMap ();DataSource pool=C3p0Pool.getPool();QueryRunner qr=new QueryRunner(pool);String sql="select count(*) from stud where 1=1 ";if(stud.getId()!=null&&stud.getId().trim().length()>0){sql+="and id like '%"+stud.getId()+"%'";}if(stud.getName()!=null&&stud.getName().trim().length()>0){sql+="and name like '%"+stud.getName()+"%'";}int rows=Integer.parseInt(""+ qr.query(sql, new ScalarHandler()));int pageCount=rows/PAGE_SIZE+((rows%PAGE_SIZE==0)?0:1);map.put("pageCount", pageCount);int startRow=(currentPage-1)*PAGE_SIZE;map.put("startRow", startRow);String sql2="select * from stud where 1=1 ";//这种判断方法,很不错if(stud.getId()!=null&&stud.getId().trim().length()>0){sql2+="and id like '%"+stud.getId()+"%'";}if(stud.getName()!=null&&stud.getName().trim().length()>0){sql2+="and name like '%"+stud.getName()+"%' ";}sql2+="limit "+startRow+" , "+PAGE_SIZE;List