springboot 分頁插件PageHelper的配置和使用方法


  • 前言

    在web開發過程中涉及到表格時,例如dataTable,就會產生分頁的需求,通常我們將分頁方式分為兩種:前端分頁和后端分頁。

    1)前端分頁

      一次性請求數據表格中的所有記錄(ajax),然后在前端緩存並且計算count和分頁邏輯,一般前端組件(例如dataTable)會提供分頁動作。

      特點是:簡單,很適合小規模的web平台;當數據量大的時候會產生性能問題,在查詢和網絡傳輸的時間會很長。

    2)后端分頁

      在ajax請求中指定頁碼(pageNum)和每頁的大小(pageSize),后端查詢出當頁的數據返回,前端只負責渲染。

      特點是:復雜一些;性能瓶頸在MySQL的查詢性能,這個當然可以調優解決。一般來說,web開發使用的是這種方式。

      我們說的也是后端分頁。

  • MySQL對分頁的支持

簡單來說MySQL對分頁的支持是通過limit子句。請看下面的例子。

復制代碼
limit關鍵字的用法是
LIMIT [offset,] rows
offset是相對於首行的偏移量(首行是0),rows是返回條數。

# 每頁10條記錄,取第一頁,返回的是前10條記錄
select * from tableA limit 0,10;
# 每頁10條記錄,取第二頁,返回的是第11條記錄,到第20條記錄,
select * from tableA limit 10,10;
復制代碼

這里提一嘴的是,MySQL在處理分頁的時候是這樣的:

limit 1000,10 - 過濾出1010條數據,然后丟棄前1000條,保留10條。當偏移量大的時候,性能會有所下降。

limit 100000,10 - 會過濾10w+10條數據,然后丟棄前10w條。如果在分頁中發現了性能問題,可以根據這個思路調優。

 

  • Mybatis分頁插件PageHelper

在使用Java Spring開發的時候,Mybatis算是對數據庫操作的利器了。不過在處理分頁的時候,Mybatis並沒有什么特別的方法,一般需要自己去寫limit子句實現,成本較高。好在有個PageHelper插件。

1、POM依賴

PageHelper的依賴如下。(這里有個坑,springboot引入的依賴和spring的依賴不一樣

 

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>

2、application.yml 添加配置

# 分頁插件
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

 3.Controller中實現分頁

  @ApiOperation(value = "獲取電池采集歷史集合",httpMethod = "GET", notes = "獲取電池采集歷史集合")
    @ResponseBody
    @RequestMapping(value = {"/Pagelist"}, method = RequestMethod.GET)
    public Result getPageList(
            @ApiParam(value = "mac地址", required = true) String MAC,
            @ApiParam(value = "電池編號", required = true) Integer Number,
            @ApiParam(value = "開始時間", required = true) String starTime,
            @ApiParam(value = "結束時間", required = true) String endTime,
            @ApiParam(value = "分頁索引", required = true) Integer pageIndex,
            @ApiParam(value = "分頁條數", required = true) Integer pageSize) {
        try {
            PageHelper.startPage(pageIndex, pageSize);
            List<batteryinfoEntity> list =   service.getAll(MAC,Number,starTime,endTime,null, null);
            
            PageInfo<batteryinfoEntity> pageInfo = new PageInfo<batteryinfoEntity>(list);
            //分頁列表,總數
            return Result.successPage(pageInfo.getList(),(int)pageInfo.getTotal());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return Result.failure(ResponseCode.ERROR_999, ResponseMsg.QUERY_ERROR);
        }
    }

說明:service.getAll()方法就是正常的按業務查詢,PageHelper自動就注入分頁。

通過調試可以看到,sql 自動添加了 limit 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM