真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot2.x中你不知道的PageHelper是什么

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

創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元西寧做網(wǎng)站,已為上家服務(wù),為西寧各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

PageHelper

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

花了一個(gè)晚上的時(shí)間,研究了一下合理的怎么玩這個(gè)。

快速入門

如果你想在一個(gè)Spring Boot項(xiàng)目中快速進(jìn)行一次分頁操作,只需要兩步即可:

導(dǎo)入Maven

這里我導(dǎo)入的是官方最新的:


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.0.0


    tk.mybatis
    mapper-spring-boot-starter
    2.1.5


    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.2.10
使用
 // 只有緊跟在PageHelper.startPage方法后的第一個(gè)Mybatis的查詢(Select)方法會被分頁!!!!
 PageHelper.startPage(1, 10);
 return PageInfo.of(userService.findAll());

沒錯(cuò),只需要兩句代碼即可達(dá)到我們想要的分頁效果

進(jìn)階玩法

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

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

helperDialect,offsetAsPageNum,rowBoundsWithCount,pageSizeZero,reasonable,params,supportMethodsArguments,autoRuntimeDialectcloseConn等等,我們可以通過配置這些屬性來獲得更為強(qiáng)大的效果~

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

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

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

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

這里需要說一點(diǎn),雖然返回了全部的結(jié)果,但是還是執(zhí)行了count的動(dòng)作,開發(fā)者曾在issue中表示后面的版本會修復(fù)這個(gè)問題

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

經(jīng)我的測試,目前是還沒有解決的????

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

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

來個(gè)小????:

    @GetMapping("/page1")
    public PageInfo findPage(HttpServletRequest request) {
        // 直接將請求中含有的參數(shù)傳給
        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 findAll();
    /*****************************************************************/

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

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

⑤:默認(rèn)值為false。設(shè)置為 true 時(shí),允許在運(yùn)行時(shí)根據(jù)多數(shù)據(jù)源自動(dòng)識別對應(yīng)方言的分頁,

closeConn:默認(rèn)值為 true。當(dāng)使用運(yùn)行時(shí)動(dòng)態(tài)數(shù)據(jù)源或沒有設(shè)置 helperDialect 屬性自動(dòng)獲取數(shù)據(jù)庫類型時(shí),會自動(dòng)獲取一個(gè)數(shù)據(jù)庫連接, 通過該屬性來設(shè)置是否關(guān)閉獲取的這個(gè)連接,默認(rèn)true關(guān)閉,設(shè)置為 false 后,不會關(guān)閉獲取的連接,這個(gè)參數(shù)的設(shè)置要根據(jù)自己選擇的數(shù)據(jù)源來決定。

⑥:dialect-alias 參數(shù),允許配置自定義實(shí)現(xiàn)的 別名,可以用于根據(jù)JDBCURL自動(dòng)獲取對應(yīng)實(shí)現(xiàn),允許通過此種方式覆蓋已有的實(shí)現(xiàn),配置示例如(多個(gè)配置用分號;隔開):

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());

上述內(nèi)容就是Spring Boot 2.x中你不知道的PageHelper是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞名稱:SpringBoot2.x中你不知道的PageHelper是什么
文章鏈接:http://weahome.cn/article/gidiej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部