Mysql分页_MySQL
分页其实很简单,无非就是根据sql语句,加上限制条件,显示从第几条数据,到第几条数据而已。
切入正题,先看一下下面的例子。
我有一张表sjdr_product_detail
首先查询全部:
<code class="hljs cs">select * from sjdr_product_detail; //一共17条数据</code>
<img src="/static/imghw/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150817/143aO91N5940-102J7.jpg" class="lazy" alt="这里写图片描述" title="\" />
分页,就是通过sql语句的limit关键字来限制条件。
<code class="hljs cs"><code class="hljs haml">select * from sjdr_product_detail limit #{start},#{pageSize}; </code></code>
<code class="hljs haml">start 和 pageSize 都用 #{ } 标注起来,是想让大家知道,这两个值是变量,即需要限制的条件。其实pageSize应该是可以固定的,比如每页显示3条,我们固定死。所以,下面主要的就是来得到这个start的值,那么到底这个值怎么得到呢?请看下面
<code class="hljs haml"><b>实验,找出规律</b>
<code class="hljs haml"><b>首先,pageSize = 3 ,即每页显示条数为3条</b>
<code class="hljs haml">查询第1页
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs">#第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;</code></code></code>
<code class="hljs haml"><code class="hljs cs"><img src="/static/imghw/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150817/143aO91R1X0-119328.jpg" class="lazy" alt="这里写图片描述" title="\" />
<code class="hljs haml"><code class="hljs cs">数据一目了然,那么我们来研究一下,页数、start、pageSize 之间的关系
<code class="hljs haml"><code class="hljs cs">当前页 |
<code class="hljs haml"><code class="hljs cs">start |
<code class="hljs haml"><code class="hljs cs">pageSize |
<code class="hljs haml"><code class="hljs cs">1 |
<code class="hljs haml"><code class="hljs cs">0 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">2 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">6 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">4 |
<code class="hljs haml"><code class="hljs cs">9 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">5 |
<code class="hljs haml"><code class="hljs cs">12 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs">6 |
<code class="hljs haml"><code class="hljs cs">15 |
<code class="hljs haml"><code class="hljs cs">3 |
<code class="hljs haml"><code class="hljs cs"><b>规律:从以上不难看出: start = (当前页-1)* pageSize</b>
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs">0 = (1-1) * 3 3 = (2-1) * 3 6 = (3-1) * 3 9 = (4-1) * 3 12= (5-1) * 3 15= (6-1) * 3 </code></code></code>
<code class="hljs haml"><code class="hljs cs">既然我们得到了这个规律,那么下面就容易多了。怎么把它整合到我们的项目当中去?
<code class="hljs haml"><code class="hljs cs">首先,我们见一个分页工具类PageUtil.class
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs"><code class="hljs cs">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; } } </code></code></code></code>
<code class="hljs haml"><code class="hljs cs"><code class="hljs cs">2 我这里用的是mybatis
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><!-- 查询数量 --> <select id="getCount" resulttype="java.lang.Integer"> select count(1) from sjdr_product_detail; </select> <!-- 分页查询 --> <select id="queryByPage" resultmap="detail_resultMap" resulttype="Detail"> select * from sjdr_product_detail order by P_ID DESC limit #{skips},#{pageSize}; </select></code></code></code></code></code>
<code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml">3 Controller
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><code class="hljs java">@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<detail> detailList = this.detailService.queryByPage(page); page.setRows(detailList); //转成json格式 WriteResponseUtil util = new WriteResponseUtil(); util.writeResponse(JsonUtil.toJSONString(page), res); } </detail></code></code></code></code></code></code>
<code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><code class="hljs java">所以分页查询的时候,只要传递页数和每页显示条数即可。我这边是倒叙查询<br />
查询结果:
<code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><code class="hljs java">detail_page.htm?curr=1&size=3
<code class="hljs cs"><code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><code class="hljs java"><code class="hljs cs">{ "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 //总页数 }</code></code></code></code></code></code></code>
<code class="hljs haml"><code class="hljs cs"><code class="hljs cs"><code class="hljs xml"><code class="hljs java"><code class="hljs cs">所以分页查询还是很简单的。<br>
希望给大家带来一点帮助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。
