SpringBoot框架之PageHelper分頁查詢

SpringBoot框架中集成了TKMybatis+PageHelper實現高效查詢和分頁。

Mybatis 通用 Mapper  極其方便的使用 Mybatis 單表的增刪改查,支持單表操作,不支持通用的多表聯合查詢
優點:
(1)通用 Mapper 可以極大的方便開發人員。 

(2)通用 Mapper 可以緩存,全部針對單表操作,每個實體類都需要繼承通用 Mapper 接口來獲得通用方法。

接下來開始學習PageHelper

1、首先需要在pom文件中加入:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.0.0</version>
</dependency>

2、配置文件mybatis-config.xml中加入如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
    	<!-- 對在此配置文件下的所有cache 進行全局性開/關設置。 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局性設置懶加載。如果設爲‘false’,則所有相關聯的都會被初始化加載。 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 允許和不允許單條語句返回多個數據集(取決於驅動需求) -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 使用列標籤代替列名稱。不同的驅動器有不同的作法。參考一下驅動器文檔,或者用這兩個不同的選項進行測試一下。 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 配置和設定執行器,SIMPLE 執行器執行其它語句。REUSE 執行器可能重複使用prepared statements 語句,BATCH執行器可以重複執行語句和批量更新。 -->
        <setting name="defaultExecutorType" value="REUSE"/>
        <!-- 設置一個時限,以決定讓驅動器等待數據庫迴應的多長時間爲超時 -->
        <setting name="defaultStatementTimeout" value="25000"/>
        <!-- 允許JDBC 生成主鍵。需要驅動器支持。如果設爲了true,這個設置將強制使用被生成的主鍵,有一些驅動器不兼容不過仍然可以執行。 -->
        <setting name="useGeneratedKeys" value="false" />
        <!-- 配置和設定執行器,SIMPLE 執行器執行其它語句。REUSE 執行器可能重複使用prepared statements 語句,BATCH執行器可以重複執行語句和批量更新。 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!-- 映射空字段 -->
        <setting name="callSettersOnNulls" value="true"/> 
    </settings>
     <plugins>  
        <!-- com.github.pagehelper爲PageHelper類所在包名 -->  
        <plugin interceptor="com.github.pagehelper.PageHelper">  
            <!-- 4.0.0以後版本可以不設置該參數 -->  
            <property name="dialect" value="mysql"/>  
            <!-- 該參數默認爲false -->  
            <!-- 設置爲true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 -->  
            <!-- 和startPage中的pageNum效果一樣-->  
            <property name="offsetAsPageNum" value="true"/>  
            <!-- 該參數默認爲false -->  
            <!-- 設置爲true時,使用RowBounds分頁會進行count查詢 -->  
            <property name="rowBoundsWithCount" value="true"/>  
            <!-- 設置爲true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->  
            <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)-->  
            <property name="pageSizeZero" value="true"/>  
            <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->  
            <!-- 啓用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 -->  
            <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 -->  
            <property name="reasonable" value="true"/>  
            <!-- 3.5.0版本可用 - 爲了支持startPage(Object params)方法 -->  
            <!-- 增加了一個`params`參數來配置參數映射,用於從Map或ServletRequest中取值 -->  
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默認值 -->  
            <!-- 不理解該含義的前提下,不要隨便複製該配置 -->  
            <property name="params" value="pageNum=start;pageSize=limit;"/>  
            <!-- 支持通過Mapper接口參數來傳遞分頁參數 -->  
            <property name="supportMethodsArguments" value="true"/>  
            <!-- always總是返回PageInfo類型,check檢查返回類型是否爲PageInfo,none返回Page -->  
            <property name="returnPageInfo" value="check"/>  
        </plugin>  
    </plugins>  
</configuration>  

目前Pagehelper插件支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數據庫分頁,不同數據庫只需要修改helperDialect就行。

3、java代碼中的使用如下:

PageHelper.startPage(page, rows); 
List<Map> list = testService.find(); //獲取數據
PageInfo<Map> pageInfo = new PageInfo<>(list);

第一行是設置頁數和每頁顯示幾條,插件會自動對接下來的sql語句加上分頁方式。PageInfo中是分頁的一些信息,包括總頁數,當前頁,總數據等。

PageInfo也可以這樣設置:

PageInfo<T> findPage(T t, Integer pageNum, Integer pageSize);

demo:根據前臺傳來page參數,來進行分頁。

(1)根據前臺page參數傳遞來返回分頁信息

pageNo: 1, pageSize: 10,

(2)後臺返回

/**
	 * 主頁面分頁查詢方法
	 * @param map
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/getCommodity")
	@ResponseBody
	public PageInfo<Map<String, Object>> getCommodityList(@RequestBody Map<String,Object> map,HttpServletRequest request, HttpServletResponse response){
		int pageNo = Integer.parseInt(map.get("pageNo") + "");
		int pageSize = Integer.parseInt(map.get("pageSize") + "");
		PageHelper.startPage(pageNo, pageSize);
		PageInfo<Map<String, Object>> page = new PageInfo(userService.getCommodity(map));	
		return page;
	}

(3)前臺接收page來顯示

下載:jQuery分頁插件pagination.js

​<div id="pages"></div>

$.pagination($("#pages"), result.total, result.pageSize, function(page, rows) {
       /**
         * jq             : 分頁欄放置jq對象
         * total          : 總記錄數
         * rows           : 每頁顯示多少條
         * jumpPageFun    :點具體頁或者跳頁執行函數 (page,rows)
         * currPage       : 當前頁 默認1 默認第幾頁選中
         */

})

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章