servlet实现mysql数据库分页

一、分页所需要的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>
原文地址:https://www.cnblogs.com/yanpingping/p/10780937.html