javascript
学习Spring Boot:(八)Mybatis使用分页插件PageHelper
首先Mybqtis可以通過SQL 的方式實(shí)現(xiàn)分頁很簡(jiǎn)單,只要在查詢SQL 后面加上limit #{currIndex} , #{pageSize}就可以了。
本文主要介紹使用攔截器的方式實(shí)現(xiàn)分頁。
實(shí)現(xiàn)原理
攔截器實(shí)現(xiàn)了攔截所有查詢需要分頁的方法,并且利用獲取到的分頁相關(guān)參數(shù)統(tǒng)一在sql語句后面加上limit分頁的相關(guān)語句,從而達(dá)到SQL 分頁的目的,它的好處不用多說了,代碼也寫的很少,對(duì)SQL 的侵入較少,推薦使用。
步驟
添加依賴
<pagehelper.version>1.2.3</pagehelper.version><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version> </dependency>配置文件
在系統(tǒng)配置文件中加入pagehelper的配置信息:
pagehelper:helper-dialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSql針對(duì)pagehelper的配置參數(shù),查詢了一下:
\1. helperDialect:分頁插件會(huì)自動(dòng)檢測(cè)當(dāng)前的數(shù)據(jù)庫鏈接,自動(dòng)選擇合適的分頁方式。
你可以配置helperDialect屬性來指定分頁插件使用哪種方言。配置時(shí),可以使用下面的縮寫值:
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
**特別注意:**使用 SqlServer2012 數(shù)據(jù)庫時(shí),需要手動(dòng)指定為 sqlserver2012,否則會(huì)使用 SqlServer2005 的方式進(jìn)行分頁。
你也可以實(shí)現(xiàn) AbstractHelperDialect,然后配置該屬性為實(shí)現(xiàn)類的全限定名稱即可使用自定義的實(shí)現(xiàn)方法。
當(dāng)該參數(shù)設(shè)置為 true 時(shí),會(huì)將 RowBounds 中的 offset 參數(shù)當(dāng)成 pageNum 使用,可以用頁碼和頁面大小兩個(gè)參數(shù)進(jìn)行分頁。
當(dāng)該參數(shù)設(shè)置為true時(shí),使用 RowBounds 分頁會(huì)進(jìn)行 count 查詢。
pageNum>pages(超過總數(shù)時(shí)),會(huì)查詢最后一頁。默認(rèn)false 時(shí),直接根據(jù)參數(shù)進(jìn)行查詢。
可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認(rèn)值,
默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
使用方法可以參考測(cè)試代碼中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。
(不支持自動(dòng)選擇sqlserver2012,只能使用sqlserver),用法和注意事項(xiàng)參考下面的場(chǎng)景五。
通過該屬性來設(shè)置是否關(guān)閉獲取的這個(gè)連接,默認(rèn)true關(guān)閉,設(shè)置為 false 后,不會(huì)關(guān)閉獲取的連接,這個(gè)參數(shù)的設(shè)置要根據(jù)自己選擇的數(shù)據(jù)源來決定。
重要提示:
當(dāng) offsetAsPageNum=false 的時(shí)候,由于 PageNum 問題,RowBounds查詢的時(shí)候 reasonable 會(huì)強(qiáng)制為 false。使用 PageHelper.startPage 方法不受影響。
注: PageRowBounds 想要查詢總數(shù)也需要配置該屬性為 true。
使用
在業(yè)務(wù)查詢 的時(shí)候加上
PageHelper.startPage(pageIndex, pageSize);例如:
@Overridepublic List<SysUserEntity> query(SysUserEntity user) {// 查詢第一頁的兩條數(shù)據(jù)PageHelper.startPage(1, 2);return sysUserDao.query(user);}測(cè)試一下返回結(jié)果:
我們來看下它執(zhí)行的SQL :
Preparing: SELECT count(0) FROM sys_user Parameters: Total: 1 Preparing: SELECT * FROM sys_user LIMIT ? Parameters: 2(Integer)Total: 2補(bǔ)充
使用方法
使用的時(shí)候,需要仔細(xì)閱讀作者的文章
pagehelper/Mybatis-PageHelper
主要是閱讀使用方法,以及各個(gè)場(chǎng)景中使用什么方法解決問題,注意事項(xiàng)。
分頁排序
PageHelper.startPage(pageIndex, pageSize, orderBy);支持返回PageInfo
@Overridepublic PageInfo queryByPageInfo(SysUserEntity user) {return PageHelper.startPage(1,2).doSelectPageInfo(() -> sysUserDao.query(user));}使用Swagger測(cè)試返回?cái)?shù)據(jù):
{"pageNum": 1,"pageSize": 2,"size": 2,"startRow": 1,"endRow": 2,"total": 4,"pages": 2,"list": [{"id": 1,"username": "def","password": "123","mobile": null,"email": null,"createUserId": null,"createDate": null},{"id": 7,"username": "wuwii","password": "123","mobile": null,"email": null,"createUserId": null,"createDate": null}],"prePage": 0,"nextPage": 2,"isFirstPage": true,"isLastPage": false,"hasPreviousPage": false,"hasNextPage": true,"navigatePages": 8,"navigatepageNums": [1,2],"navigateFirstPage": 1,"navigateLastPage": 2,"firstPage": 1,"lastPage": 2 }總結(jié)
以上是生活随笔為你收集整理的学习Spring Boot:(八)Mybatis使用分页插件PageHelper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: access开发精要(1)-字段验证
- 下一篇: springboot中service层注