一、分页所需要的sql语句准备
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
例如:
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
第n页 每页x条 则用语句 limit (n-1)* x ,x
计算总共需要多少页: t表示总条 x表示每页显示多少条 总页数为:(t+x-1)/x
二、具体实现
1、dao层,接口实现
1 package com.aaa.dao; 2 3 import java.util.List; 4 import java.util.Map; 5 6 7 8 import java.util.List; 9 import java.util.Map; 10 11 /** 12 * 分页查询 13 */ 14 15 public interface IPageDAO { 16 17 /** 18 * 19 * 第n页 每页x条 limit (n-1)* x ,x 20 * t总共的条数 x一页显示多少count 总:(t+x-1)/x 21 * 22 */ 23 24 /** 25 * 参数:页码,一页显示的条数 26 * 返回值:List<Map<String, Object> 27 */ 28 29 List<Map<String, Object>> getPage(int page, int count); 30 }
2、dao接口的实现类
1 package com.aaa.dao.impl; 2 3 import com.aaa.dao.IPageDAO; 4 import com.aaa.util.DBUtil; 5 6 import java.util.List; 7 import java.util.Map; 8 9 public class PageDAOImpl implements IPageDAO { 10 @Override 11 public List<Map<String, Object>> getPage(int page, int count) { 12 13 //使用了拼接,将传过来的页码与每页显示的条数拼接在sql语句中 14 String sql="select * from product LIMIT "+page+","+count; 15 System.out.println(sql); 16 return DBUtil.executeQuery(sql); 17 } 18 }
3、servlet业务处理
1 package com.aaa.servlet; 2 3 import com.aaa.dao.IPageDAO; 4 import com.aaa.dao.impl.PageDAOImpl; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 import java.io.IOException; 12 import java.util.List; 13 import java.util.Map; 14 15 @WebServlet("/page") 16 public class PageServlet extends HttpServlet { 17 18 @Override 19 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 20 21 //获取从前台页面穿过来 的页码数,如果需要传每个页面显示的条数,也可以参数接收 22 String a = req.getParameter("a"); 23 24 //调用dao,查询数据 25 IPageDAO dao=new PageDAOImpl(); 26 List<Map<String, Object>> page = dao.getPage(Integer.parseInt(a), 10); 27 28 // 共享参数,将所有的商品信息共享 29 req.setAttribute("allProduct",page); 30 31 // 请求转发到 index.jsp 页面 32 req.getRequestDispatcher("/views/index.jsp").forward(req,resp); 33 } 34 }
4、jsp页面的分页设计
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"+"views/"; %> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML> <html> <head> <style> .page{ text-align: center; margin-top: 50px; } .page a{ text-decoration: none; border:1px solid #f9d52b; padding: 5px 7px; color: #767675; cursor: pointer; } </style> </head> <body> <%--分页部分--%> <div class="page"> <span>上一页</span> <a href="/shop/page?a=1">1</a> <a href="/shop/page?a=2">2</a> <a href="/shop/page?a=3">3</a> <a href="/shop/page?a=4">4</a> <a href="/shop/page?a=5">5</a> <span>下一页</span> </div> </body> </html>