一、分页所需要的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>

servlet实现mysql数据库分页的更多相关文章

  1. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  2. jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册

    简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...

  3. oracle sqlserver mysql数据库分页

    1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...

  4. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

  5. MySQL 数据库 分页查询

    在使用MySQL 进行数据库分页查询的时候最主要是使用LIMIT子句进行查询: 首先来看一下LIMIT: LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两 ...

  6. servlet连接mysql数据库和oracle数据库

    连接mysql数据库 package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...

  7. html文件form表单action调用servlet连接mysql数据库实例

    web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  8. EntityFrameWork使用MySql数据库分页的BUG

    环境 使用MySQL Connector NET 6.7.4+EF5.0+VS2010 问题描述 IQueryable<T>类型的Where方法和Skip或Take方法一起使用时,生成的S ...

  9. mysql数据库分页查询优化

    原博:MySQL单表百万数据记录分页性能优化 limit优化 当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1.   直接用limit ...

随机推荐

  1. 转载----五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    原文地址:https://www.oschina.net/question/54100_9455 五种开源协议(GPL,LGPL,BSD,MIT,Apache) 什么是许可协议? 什么是许可,当你为你 ...

  2. 13行代码实现:Python实时视频采集(附源码)

    一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...

  3. Linux运维小知识

    自己日常用到的命令稍微备份一下: 版本确认 CentOS / RedHat Enterprise cat /etc/redhat-release Ubuntu cat /etc/lsb-release ...

  4. WIMLIB-CAPTURE捕获说明

    WIMLIB-CAPTURE捕获说明1.如果捕获目录Y:\windows,那么[ExclusionList]字段里面不能有\windows,否则什么都不能捕捉,但是可以有下面的子目录例如\window ...

  5. 批处理for中字符串截取必须先把循环变量代替出来才行!!!

    @echo off & setlocal enabledelayedexpansion set ifo=abc,def,ghi,jkl,mnopqrstuvwxyz0123456789 ech ...

  6. 微信小程序云函数Windows下安装wx-server-sdk

    第一次上传部署云函数时,会提示这个,建议在这之前先安装一下node.js. https://nodejs.org/en/ 下载nodejs,然后直接安装,在cmd控制台输入node -v和npm -v ...

  7. jumpservice使用465端口发送邮件

    阿里云.华为云等云服务器默认屏蔽掉了25端口后,内网服务器如何通过跳板机发送邮件到外网邮箱. 如果是可联网的阿里云机器,可以直接配置mailx使用465端口发送邮件.需要进行ssl验证配置. Cent ...

  8. jumpservice配置:快速入门

    快速入门 说明 到 Jumpserver 会话管理-终端管理 查看 Coco Guacamole 等应用是否在线 一.系统设置 1.1 基本设置 # 修改 url 的"localhost&q ...

  9. c#+CAD动态移动效果

    public class MoveRotateScaleJig : DrawJig { public static List<Entity> entities = new List< ...

  10. FIFO使用技巧

    FPGA中,经常会用到FIFO来缓冲数据或者跨时钟传递数据. 1.Almost full & Almost empty 作为初学者,最开始使用FIFO的时候,对于它的理解,无非是配置好位宽.深 ...