一、MySql实现分页查询的SQL语句
1、分页需求:
客户端通过传递pageNo(页码),counter(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:

比如:

查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第10条到第20条的数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

查询第20条到第30条的数据的sql是:select * from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

2、总结
通过上面的分析,可以得出符合我们自己需求的分页sql格式是:select * from table limit (pageNo-1)*counter,counter; 其中pageNo是页码,counter是每页显示的条数。

二、JavaWeb程序
1、创建PageBeanUtils.java工具类
package com.ambow.utils;
import java.util.List;
public class PageBeanUtils {
private int prePage;//上一页
private int nextPage;//下一页
private int firstPage=1;//首页
private int lastPage;//尾页
private int currentPage = 1;//当前
private int totalPage;//总页数
private int pageSize;//每页显示条数,默认显示10条
private int totalData;//数据总条数
private List pageData;//数据
public PageBeanUtils(int currentPage,int pageSize, int totalData) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.totalData = totalData;

//计算获得总页数(尾页)
// this.totalPage = this.lastPage = (totalData+pageSize-1)/pageSize;
this.totalPage = this.lastPage = (int)Math.ceil((double)totalData/pageSize);
//防止当前页小于1
this.currentPage = Math.max(this.currentPage, 1);
//防止当前页大于总的页数
this.currentPage = Math.min(this.totalPage, this.currentPage);
//设置上一页,上一页不能小于1
this.prePage = Math.max(this.currentPage-1, 1);
//设置下一页,下一页不能大于总页数
this.nextPage = Math.min(this.currentPage+1, this.totalPage);

/**

  • ceil
    public static double ceil(double a)
    返回最小的(最接近负无穷大) double 值,该值大于等于参数,并等于某个整数。特殊情况如下:
    如果参数值已经等于某个整数,那么结果与该参数相同。
    如果参数为 NaN、无穷大、正 0 或负 0,那么结果与参数相同。
    如果参数值小于 0,但是大于 -1.0,那么结果为负 0。
    注意, Math.ceil(x) 的值与 -Math.floor(-x) 的值完全相同。
    参数:
    a - 一个值。
    返回:
    最小(最接近负无穷大)浮点值,该值大于等于该参数,并等于某个整数。
    */

}

public PageBeanUtils(int prePage, int nextPage, int firstPage, int lastPage, int currentPage, int totalPage,
int pageSize, int totalData, List pageData) {
super();
this.prePage = prePage;
this.nextPage = nextPage;
this.firstPage = firstPage;
this.lastPage = lastPage;
this.currentPage = currentPage;
this.totalPage = totalPage;
this.pageSize = pageSize;
this.totalData = totalData;
this.pageData = pageData;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalData() {
return totalData;
}
public void setTotalData(int totalData) {
this.totalData = totalData;
}
public List getPageData() {
return pageData;
}
public void setPageData(List pageData) {
this.pageData = pageData;
}

/*
*
*

  • totalPage = (totalData+pageSize-1)/pageSize;
  • */
    }
    2、在接口里面定义分页查询的方法
    package com.ambow.dao;

import java.util.List;

import com.ambow.pojo.Good;

public interface IGoodDao {
//增删改查
public void add(Good good);
public void delete(Good good);
public void update(Good good);
public void query(Good good);
public Good queryOne(Good good);
public List queryMore(Good good);
public List queryByName(String name);//根据商家名称进行模糊查询
//条件分页查询
public List queryByName(String name,int currentPage,int pageSize);
//获取满足某个条件的总记录数
public int getTotalNum(String name);
}
3、在接口的实现类里面实现方法
package com.ambow.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.ambow.dao.IGoodDao;
import com.ambow.pojo.Good;
import com.ambow.utils.DBUtils;

public class GoodDaoImpl implements IGoodDao {
DBUtils db = new DBUtils();
@Override
public void add(Good good) {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = “insert into good (name,address,tel,dishes) values (?,?,?,?)”;
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, good.getName());
pstmt.setString(2, good.getAddress());
pstmt.setString(3, good.getTel());
pstmt.setString(4, good.getDishes());
int isOk = pstmt.executeUpdate();
//System.out.println(“add-----”+isOk);
} catch (SQLException e) {
e.printStackTrace();
}
}

@Override
public void delete(Good good) {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = “delete from good where id = ?”;
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, good.getId());
int isOk = pstmt.executeUpdate();
System.out.println(“delete-----”+isOk);
} catch (SQLException e) {
e.printStackTrace();
}

}

@Override
public void update(Good good) {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = “update good set name=?,address=?,tel=?,dishes=? where id=?”;
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, good.getName());
pstmt.setString(2, good.getAddress());
pstmt.setString(3, good.getTel());
pstmt.setString(4, good.getDishes());
pstmt.setInt(5,good.getId());
int isOk = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}

}

@Override
public void query(Good good) {
// TODO Auto-generated method stub

}

@Override
public Good queryOne(Good good) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = “select * from good where id = ?”;
Good gd = null;
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, good.getId());
rs = pstmt.executeQuery();
while(rs.next()){
gd = new Good(rs.getInt(1),rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5));
}
} catch (SQLException e) {
e.printStackTrace();
}
return gd;

}

@Override
public List queryMore(Good good) {
// TODO Auto-generated method stub
return null;
}

@Override
public List queryByName(String name) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = “select * from good where name like ?”;
List goodList = new ArrayList();
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, “%”+name+"%");
rs = pstmt.executeQuery();
while(rs.next()){
goodList.add(new Good(rs.getInt(1),rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5)));
}
} catch (SQLException e) {
e.printStackTrace();
}
return goodList;
}

@Override
public List queryByName(String name, int currentPage, int pageSize) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = “select * from good where name like ? limit ?,?”;
List goodList = new ArrayList();
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, “%”+name+"%");
pstmt.setInt(2,(currentPage-1)*pageSize);
pstmt.setInt(3,pageSize);
rs = pstmt.executeQuery();
while(rs.next()){
goodList.add(new Good(rs.getInt(1),rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5)));
}
} catch (SQLException e) {
e.printStackTrace();
}
return goodList;

}

@Override
public int getTotalNum(String name) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = “select count(id) from good where name like ?”;
int total = 0;
try {
conn = DBUtils.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, “%”+name+"%");
rs = pstmt.executeQuery();
while(rs.next()){
total = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return total;

}

}
4.在Servlet里面调用实现类里面的分页查询方法
package com.ambow.servlet;

import java.io.IOException;
import java.util.List;

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 com.ambow.dao.IGoodDao;
import com.ambow.dao.impl.GoodDaoImpl;
import com.ambow.pojo.Good;
import com.ambow.utils.PageBeanUtils;

@WebServlet("/QueryServlet")
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private IGoodDao goodDao = new GoodDaoImpl();
public QueryServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
String keywords = request.getParameter(“kw”);
String method = request.getParameter(“method”);
if(“add”.equals(method)){
String name = request.getParameter(“name”);
String address = request.getParameter(“address”);
String tel = request.getParameter(“tel”);
String dishes = request.getParameter(“dishes”);
Good good = new Good(0,name,address,tel,dishes);
goodDao.add(good);
//调用dao的查询方法,返回一个List
List goods = goodDao.queryByName(keywords);
request.setAttribute(“list”, goods);
request.getRequestDispatcher(“goods.jsp”).forward(request, response);
}else if(“search”.equals(method)){
if(null==keywords) {
keywords="";
}
int currentPage = 1;
try {
currentPage=Integer.parseInt(request.getParameter(“curPage”));
if(currentPage<=0) {
currentPage = 1;
}
}catch(Exception e) {
currentPage = 1;
}
int pageSize=10;
int totalData = goodDao.getTotalNum(keywords);
int totalPage = (int)Math.ceil((double)totalData/pageSize);
if(currentPage>totalPage){
currentPage = totalPage;
}
List goods = goodDao.queryByName(keywords,currentPage,pageSize);
PageBeanUtils pg = new PageBeanUtils(currentPage,pageSize,totalData);
pg.setPageData(goods);
request.setAttribute(“pg”, pg);
request.getRequestDispatcher(“good2.jsp”).forward(request, response);
}else if(“delete”.equals(method)){
System.out.println(keywords);
//实现删除
String id = request.getParameter(“id”);
Good good = new Good();
good.setId(Integer.valueOf(id));
goodDao.delete(good);
//调用dao的查询方法,返回一个List
List goods = goodDao.queryByName(keywords);
request.setAttribute(“list”, goods);
request.getRequestDispatcher(“goods.jsp”).forward(request, response);
}else if(“queryById”.equals(method)){
//查询一个
String id = request.getParameter(“id”);
Good good = new Good();
good.setId(Integer.valueOf(id));
good = goodDao.queryOne(good);
//调用dao的查询方法,返回一个good
request.setAttribute(“good”, good);
request.getRequestDispatcher(“update.jsp”).forward(request, response);
}else if(“update”.equals(method)){
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
String address = request.getParameter(“address”);
String tel = request.getParameter(“tel”);
String dishes = request.getParameter(“dishes”);
Good good = new Good(Integer.valueOf(id),name,address,tel,dishes);
goodDao.update(good);
//调用dao的查询方法,返回一个List
List goods = goodDao.queryByName(keywords);
request.setAttribute(“list”, goods);
request.getRequestDispatcher(“goods.jsp”).forward(request, response);
}else{
//调用dao的查询方法,返回一个List
List goods = goodDao.queryByName(keywords);
request.setAttribute(“list”, goods);
request.getRequestDispatcher(“goods.jsp”).forward(request, response);
}
}

}
5.在JSP页面获取Servlet里面传过来的数据
<%@ page language=“java” contentType=“text/html; charset=utf-8”
pageEncoding=“utf-8” import=“java.util.ArrayList,com.ambow.pojo.Good,
com.ambow.pojo.User,com.ambow.utils.PageBeanUtils”%>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

外卖系统的搜索功能 添加商家

</c:forEach>
商家店名 商家地址 商家电话 经营菜品 编辑
${g.name} ${g.address} ${g.tel} ${g.dishes} 修改 删除

首页 上一页 下一页 尾页 当前第${pg.currentPage}页/共${pg.totalPage}页 每页显示${pg.pageSize}条

JavaWeb入门之简单分页查询功能实现相关推荐

  1. 【项目实战】使用MyBatis-Plus实现分页查询功能

    一.分页查询功能介绍 1.1 分页查询功能概述 常规查询全部出现的风险 : 分页查询将数据库中庞大的数据分段显示,每页显示用户自定义的行数,提高用户体验度,最主要的是如果一次性从服务器磁盘中读出全部数 ...

  2. jpa mysql sql分页查询语句_JPA多条件复杂SQL动态分页查询功能

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  3. spring data jpa实现有条件的分页查询功能

    spring data jpa实现有条件的分页查询功能 前端部分代码.发送请求: $('#grid').datagrid({iconCls: 'icon-forward',fit: true,bord ...

  4. Kotlin实战案例:实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表)

    n实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果) 随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Ko ...

  5. rowbounds分页oracle,Oracle使用MyBatis中RowBounds实现分页查询功能

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...

  6. spring data jpa实现分页查询功能

    spring data jpa实现分页查询功能 HTML代码部分: // 收派标准信息表格 $('#grid').datagrid( {iconCls : 'icon-forward',fit : t ...

  7. JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  8. php ajax实现查询功能,ajax实现分页查询功能

    这次给大家带来ajax实现分页查询功能,ajax实现分页查询功能的注意事项有哪些,下面就是实战案例,一起来看一下. ajax分页查询功能的具体代码,供大家参考,具体内容如下 显示的效果如下: 实现效果 ...

  9. javaweb的struts2的分页查询操作

    javaweb的struts2的分页查询操作 分页查询的实现: 1.利用action完成 action有成员变量: 除了实体对象的属性还有 // 分页显示 public int totalRecord ...

最新文章

  1. 最新BERT相关论文汇总
  2. 上传和优化Magento 2中的产品图像和视频
  3. THANATOS数据库(自噬调节相关蛋白及其翻译后修饰信息数据库)使用指南
  4. SpringApplication.run做了哪些事情
  5. Linux 防火墙 开放 端口 iptables
  6. python,错误、调试和测试
  7. 推荐两份学习 Kotlin 和机器学习的资料
  8. DNS迭代查询与递归查询的区别
  9. java经常用到的英文_Java中用到的英文单词,你知道多少?
  10. 一文彻底搞懂 CTR 建模
  11. 学校多媒体讲台计算机怎么开,标准多媒体教室多媒体使用方法
  12. VMware NSX 4.0 -- 网络安全虚拟化平台
  13. registry清理私有镜像
  14. 面试题,互联网产品的盈利模式有哪些?
  15. 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型
  16. Go实战--golang中使用gRPC和Protobuf实现高性能api(golang/protobuf、google.golang.org/grpc)
  17. 往者不可谏,来者犹可追,记2020第二个十年年终总结
  18. Cocos2dx 菜单项控件-Menu
  19. 数控加工的常用计算公式
  20. linux最少需要几个分区,安装Linux最少需要两个分区,分别是

热门文章

  1. TensorFlow中报错 module ‘tensorflow_core._api.v2.train‘ has no attribute ‘GradientDescentOptimize
  2. 微信开发者工具(deepin linux 还是建议使用deppin深度商店安装此软件)
  3. 启动子级时出错_WHO I级脑膜瘤手术或放射外科治疗后的恶性转变
  4. 机器视觉用c还是python_机器视觉_opencv-python环境搭建
  5. Jupyter Notebook使用说明
  6. oracle使用游标批量删除数据,oracle 游标批量处理数据
  7. java 调用foxmail_Javamail简单使用案例
  8. mysql每天销售汇总_MySQL - 所有项目的每个总销售额
  9. dy96 .pw cc 05.php,05.php · 熟悉的陌生/php - Gitee.com
  10. sql server 迁移 mysql_sql server 迁移到 mysql