本篇文章為大家展示了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,使用過Mybatis的朋友可能不是很陌生,作為一款國人開發(fā)的分頁插件,它基本上滿足了我們的日常需求。
花了一個(gè)晚上的時(shí)間,研究了一下合理的怎么玩這個(gè)。
如果你想在一個(gè)Spring Boot項(xiàng)目中快速進(jìn)行一次分頁操作,只需要兩步即可:
這里我導(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īng)結(jié)束了,但是作為一個(gè)程序員,你會僅僅滿足于初級的玩兒法嗎?不!你不會!所以,接著往下看~
從文檔中,我們可以看出,作者給我們提供了很多的參數(shù)供我們配置:
helperDialect
,offsetAsPageNum
,rowBoundsWithCount
,pageSizeZero
,reasonable
,params
,supportMethodsArguments
,autoRuntimeDialect
,closeConn
等等,我們可以通過配置這些屬性來獲得更為強(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è)問題
經(jīng)我的測試,目前是還沒有解決的????
③:合法性,即糾錯(cuò)機(jī)制,配置reasonable
為 true
,這時(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 PageInfofindPage(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è)資訊頻道。