中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 2.x中你不知道的PageHelper是什么

發布時間:2021-10-21 10:25:33 來源:億速云 閱讀:141 作者:柒染 欄目:大數據

本篇文章為大家展示了Spring Boot 2.x中你不知道的PageHelper是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

PageHelper

說起PageHelper,使用過Mybatis的朋友可能不是很陌生,作為一款國人開發的分頁插件,它基本上滿足了我們的日常需求。

花了一個晚上的時間,研究了一下合理的怎么玩這個。

快速入門

如果你想在一個Spring Boot項目中快速進行一次分頁操作,只需要兩步即可:

導入Maven

這里我導入的是官方最新的:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.10</version>
</dependency>
使用
 // 只有緊跟在PageHelper.startPage方法后的第一個Mybatis的查詢(Select)方法會被分頁!!!!
 PageHelper.startPage(1, 10);
 return PageInfo.of(userService.findAll());

沒錯,只需要兩句代碼即可達到我們想要的分頁效果

進階玩法

如果,你僅僅是想簡單的使用分頁功能,那么這篇文章到這里對你而言來說就已經結束了,但是作為一個程序員,你會僅僅滿足于初級的玩兒法嗎?不!你不會!所以,接著往下看~

從文檔中,我們可以看出,作者給我們提供了很多的參數供我們配置:

helperDialectoffsetAsPageNumrowBoundsWithCountpageSizeZeroreasonableparamssupportMethodsArgumentsautoRuntimeDialectcloseConn等等,我們可以通過配置這些屬性來獲得更為強大的效果~

這里需要說明一點,網上的教程大部分是讓我們在xml或者代碼中配置,其實如果你使用的是springboot,干嘛要舍近求遠呢,我們可以直接在Spring boot 的配置文件application.yml中進行配置:

pagehelper:
  # dialect: ①
  # 分頁插件會自動檢測當前的數據庫鏈接,自動選擇合適的分頁方式(可以不設置)
  helper-dialect: mysql 
  # 上面數據庫設置后,下面的設置為true不會改變上面的結果(默認為true)
  auto-dialect: true 
  page-size-zero: false # ②
  reasonable: true # ③
  # 默認值為 false,該參數對使用 RowBounds 作為分頁參數時有效。(一般用不著)
  offset-as-page-num: false 
  # 默認值為 false,RowBounds是否進行count查詢(一般用不著)
  row-bounds-with-count: false 
  #params: ④
  #support-methods-arguments: 和params配合使用,具體可以看下面的講解
  # 默認值為 false。設置為 true 時,允許在運行時根據多數據源自動識別對應方言的分頁
  auto-runtime-dialect: false # ⑤
  # 與auto-runtime-dialect配合使用
  close-conn: true 
  # 用于控制默認不帶 count 查詢的方法中,是否執行 count 查詢,這里設置為true后,total會為-1
  default-count: false 
  #dialect-alias: ⑥

①:默認情況下會使用 PageHelper 方式進行分頁,如果想要實現自己的分頁邏輯,可以實現 Dialect(com.github.pagehelper.Dialect) 接口,然后配置該屬性為實現類的全限定名稱。(這里不推薦這樣玩,畢竟你用了別人的插件,干嘛還要多此一舉呢?)

②:默認值為 false,當該參數設置為 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結果(相當于沒有執行分頁查詢,但是返回結果仍然是 Page 類型)。

這里需要說一點,雖然返回了全部的結果,但是還是執行了count的動作,開發者曾在issue中表示后面的版本會修復這個問題

Spring Boot 2.x中你不知道的PageHelper是什么

經我的測試,目前是還沒有解決的????

③:合法性,即糾錯機制,配置reasonabletrue,這時如果 pageNum <= 0 會查詢第一頁,如果 pageNum > pages 會查詢最后一頁。

④:為了支持startPage(Object params)方法,增加了該參數來配置參數映射,用于從對象中根據屬性名取值, 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認值, 默認值為
pageNum=pageNum;
pageSize=pageSize;
count=countSql;
reasonable=reasonable;
pageSizeZero=pageSizeZero
support-methods-arguments支持通過 Mapper 接口參數來傳遞分頁參數,默認值false,分頁插件會從查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。

來個小????:

    @GetMapping("/page1")
    public PageInfo<UserDO> findPage(HttpServletRequest request) {
        // 直接將請求中含有的參數傳給
        PageHelper.startPage(request);
        return PageInfo.of(userService.findAll());
    }
     /**
     * 查詢所有信息
     * @return 人員列表
     */
    @Select("SELECT * FROM user")
    @Results({
            @Result(property = "userName",  column = "user_name"),
            @Result(property = "password", column = "password")
    })
    List<UserDO> findAll();
    /*****************************************************************/

    //這個方法和上面的區別是直接將含有條件的請求傳給了Mapper接口
     @GetMapping("/page2")
    public PageInfo<UserDO> findPage2(HttpServletRequest request) {
        return PageInfo.of(userService.findPage(request));
    }

    //Mapper接口遇上一個的區別就是多了一個參數,SQL完全一致
    @Select("SELECT * FROM user")
    @Results({
            @Result(property = "userName",  column = "user_name"),
            @Result(property = "password", column = "password")
    })
    List<UserDO> findPage(HttpServletRequest request);

⑤:默認值為false。設置為 true 時,允許在運行時根據多數據源自動識別對應方言的分頁,

closeConn:默認值為 true。當使用運行時動態數據源或沒有設置 helperDialect 屬性自動獲取數據庫類型時,會自動獲取一個數據庫連接, 通過該屬性來設置是否關閉獲取的這個連接,默認true關閉,設置為 false 后,不會關閉獲取的連接,這個參數的設置要根據自己選擇的數據源來決定。

⑥:dialect-alias 參數,允許配置自定義實現的 別名,可以用于根據JDBCURL自動獲取對應實現,允許通過此種方式覆蓋已有的實現,配置示例如(多個配置用分號;隔開):

pagehelper.dialect-alias=oracle=com.github.pagehelper.dialect.helper.OracleDialect
幾種不同的玩法

(小聲BB一句)Lambda是真的好看啊!

     //1. offsetPage
        PageHelper.offsetPage(1, 10);
        return PageInfo.of(userService.findAll());
        //2. Lambda
        return PageHelper.startPage(1, 10).doSelectPageInfo(() -> userService.findAll());

上述內容就是Spring Boot 2.x中你不知道的PageHelper是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永州市| 洪泽县| 安化县| 泰和县| 平潭县| 白河县| 古田县| 英超| 增城市| 怀宁县| 巫溪县| 景宁| 三门县| 兴化市| 兴国县| 安远县| 阳春市| 内江市| 和平县| 泗洪县| 绥中县| 陇南市| 陕西省| 墨竹工卡县| 百色市| 万载县| 郓城县| 苏尼特左旗| 德兴市| 承德市| 迁安市| 弥勒县| 眉山市| 霍州市| 灵台县| 黄冈市| 长宁县| 合山市| 鸡泽县| 眉山市| 广宗县|