博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 分页
阅读量:5364 次
发布时间:2019-06-15

本文共 3798 字,大约阅读时间需要 12 分钟。

分页事实上非常easy,无非就是依据sql语句,加上限制条件,显示从第几条数据。到第几条数据而已。

切入正题,先看一下以下的样例。

我有一张表sjdr_product_detail

首先查询所有:

select * from sjdr_product_detail; //一共17条数据

这里写图片描写叙述

分页,就是通过sql语句的limit关键字来限制条件。

select * from sjdr_product_detail limit #{
start},#{
pageSize};

start 和 pageSize 都用 #{ } 标注起来。是想让大家知道,这两个值是变量,即须要限制的条件。

事实上pageSize应该是能够固定的,比方每页显示3条,我们固定死。

所以,以下基本的就是来得到这个start的值,那么究竟这个值怎么得到呢?请看以下

实验,找出规律

首先。pageSize = 3 ,即每页显示条数为3条

  1. 查询第1页
#第1页select * from sjdr_product_detail limit 0,3;#第2页select * from sjdr_product_detail limit 3,3;#第3页select * from sjdr_product_detail limit 6,3;#第4页select * from sjdr_product_detail limit 9,3;#第5页select * from sjdr_product_detail limit 12,3;#第6页select * from sjdr_product_detail limit 15,3;

这里写图片描写叙述

数据一目了然,那么我们来研究一下,页数、start、pageSize 之间的关系

当前页 start pageSize
1 0 3
2 3 3
3 6 3
4 9 3
5 12 3
6 15 3

规律:从以上不难看出: start = (当前页-1)* pageSize

0 = (1-1) * 33 = (2-1) * 36 = (3-1) * 39 = (4-1) * 312= (5-1) * 315= (6-1) * 3

既然我们得到了这个规律,那么以下就easy多了。怎么把它整合到我们的项目其中去?

  1. 首先,我们见一个分页工具类PageUtil.class
package cn.sg.util;/** * @author ZSL */import java.util.ArrayList;import java.util.List;public class PageUtil {    public PageUtil(int curr,int size,int total){        this.pageSize = size;        this.totalPage = total % size == 0 ?

total/size : (total/size) + 1; this.currPage = curr < 1 ? 1 : curr; this.currPage = curr > this.totalPage ? this.totalPage : this.currPage; skips = (this.currPage - 1) * this.pageSize; this.totalCount = total; } private int currPage = 1; //当前页 private int pageSize = 10; //每页显示条数 private int totalPage = 0; //总页数 private int totalCount = 0; //总条数 private int skips = 0; //跳过的值,即sql中的start值 private List rows = new ArrayList(); //用来存放查询到的数据集合 ////////////////////////////////////////////////////// //getter、setter 方法 public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } public int getSkips() { return skips; } public void setSkips(int skips) { this.skips = skips; } }

2 我这里用的是mybatis

3  Controller

@RequestMapping("detail_page.htm")    public void queryByPage(HttpServletRequest req, Model model){        //当前页        int curr = Integer.valueOf(req.getParameter("curr"));        //每页显示条数        int size = Integer.parseInt(req.getParameter("size"));        //查询数量        int total = this.detailService.getCount();        PageUtil page = new PageUtil(curr, size, total);        List
detailList = this.detailService.queryByPage(page); page.setRows(detailList); //转成json格式 WriteResponseUtil util = new WriteResponseUtil(); util.writeResponse(JsonUtil.toJSONString(page), res); }

所以分页查询的时候,仅仅要传递页数和每页显示条数就可以。我这边是倒叙查询

查询结果:

detail_page.htm?

curr=1&size=3

{    "currPage": 1, //第一页    "pageSize": 3, //每页显示条数    "rows": [      //查询数据集合        {            "p_ID": "17",            "p_PIC": "17777"        },        {            "p_ID": "16",            "p_PIC": "16666"        },        {            "p_ID": "15",            "p_PIC": "15555"        }    ],    "skips": 0,               //相当于sql中的start    "totalCount": 17,         //总条数    "totalPage": 6            //总页数}

所以分页查询还是非常easy的。

希望给大家带来一点帮助。

转载于:https://www.cnblogs.com/jzdwajue/p/7191780.html

你可能感兴趣的文章
关于An association from the table refers to an unmapped class
查看>>
sql server 2005建立数据库,表,约束,账户密码,权限,基本查询删除语句
查看>>
discuz二次开发笔记(一)------$_G全解析
查看>>
shell环境变量以及set,env,export的区别
查看>>
Apache报错You don't have permission to access on this server
查看>>
关于php的socket
查看>>
脚本控制
查看>>
每日关键词-170226
查看>>
如何提升Node执行效率
查看>>
Python学习笔记之常用函数及说明
查看>>
数据科学家:站在大数据金字塔尖的人
查看>>
。tar.gz(bz或bz2等)安装
查看>>
mysql表的一对一/一对多/多对多联系
查看>>
雷林鹏分享:jQuery EasyUI 树形菜单 - 创建基础树形网格
查看>>
类和结构的区别
查看>>
iOS开发网络篇—发送json数据给服务器以及多值参数
查看>>
1月25日 JavaScript的DOM操作
查看>>
使用HtmlParser提取网页中的链接
查看>>
第四次作业
查看>>
map为空的问题
查看>>