一、分页所需要的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层,接口实现

 package com.aaa.dao;

 import java.util.List;
import java.util.Map; import java.util.List;
import java.util.Map; /**
* 分页查询
*/ public interface IPageDAO { /**
*
* 第n页 每页x条 limit (n-1)* x ,x
* t总共的条数 x一页显示多少count 总:(t+x-1)/x
*
*/ /**
* 参数:页码,一页显示的条数
* 返回值:List<Map<String, Object>
*/ List<Map<String, Object>> getPage(int page, int count);
}

2、dao接口的实现类

 package com.aaa.dao.impl;

 import com.aaa.dao.IPageDAO;
import com.aaa.util.DBUtil; import java.util.List;
import java.util.Map; public class PageDAOImpl implements IPageDAO {
@Override
public List<Map<String, Object>> getPage(int page, int count) { //使用了拼接,将传过来的页码与每页显示的条数拼接在sql语句中
String sql="select * from product LIMIT "+page+","+count;
System.out.println(sql);
return DBUtil.executeQuery(sql);
}
}

3、servlet业务处理

 package com.aaa.servlet;

 import com.aaa.dao.IPageDAO;
import com.aaa.dao.impl.PageDAOImpl; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map; @WebServlet("/page")
public class PageServlet extends HttpServlet { @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取从前台页面穿过来 的页码数,如果需要传每个页面显示的条数,也可以参数接收
String a = req.getParameter("a"); //调用dao,查询数据
IPageDAO dao=new PageDAOImpl();
List<Map<String, Object>> page = dao.getPage(Integer.parseInt(a), 10); // 共享参数,将所有的商品信息共享
req.setAttribute("allProduct",page); // 请求转发到 index.jsp 页面
req.getRequestDispatcher("/views/index.jsp").forward(req,resp);
}
}

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>

最新文章

  1. Java页面中文编码要转换两次encodeURI
  2. 用U3D寻找看电视的感觉!!
  3. Inside Flask - json 处理
  4. ubuntu下python连接mysql
  5. php获取远程文件大小
  6. C#4.0新特性:可选参数,命名参数,Dynamic
  7. uLua学习笔记(三):Unity3D和Lua之间的相互调用
  8. Qt源码分析之QPointer
  9. jquery 事件委托三种事件绑定方式.bind(),.live(),.delegate()
  10. hdu4507
  11. MFC消息响应机制分析
  12. Provably Delay Efficient Data Retrieving in Storage Clouds---INFOCOM 2015
  13. grub2与grub区别
  14. vxWorks内核实现基本原理
  15. 面试之路(3)-详解MVC,MVP,MVVM
  16. 调用链Cat介绍
  17. Docker生态会重蹈Hadoop的覆辙吗?
  18. visual studio属性管理器
  19. 使用MongoDB数据库(2)(三十六)
  20. Visual Studio生成webservice代理类

热门文章

  1. Vmware虚拟中克隆主机没IP地址?怎么解决?
  2. 同一主机设置多个密钥与不同github账号关联,或同一主机同一密钥分别关联github和gitlab
  3. window7 修改docker安装的machine 位置
  4. docker-compose hello word
  5. linux 安装中文支持
  6. (转)SQLServer_十步优化SQL Server中的数据访问 三
  7. C#windows桌面应用小程序制作——大文件数据分段解析存储
  8. Java ---- 遍历链表(递归与非递归实现)
  9. C#导出Excel后关闭进程EXCEL.EXE
  10. 数组Array的API2