SpringBoot整合PageHelper分頁查詢
最近在公司裡做一個內部專案,但是總公司那邊需求一直沒提過來,沒辦法就自己想自己做,結果不同人負責不同模組,寫出來的程式碼就差異性很大,一個分頁查詢,四個人就寫了封裝了三個類,對於我這種強迫症太不友好了。所以我就決定引入一個統一的規範。
我們之前用Mybatis-Plus進行了一次重構,省去了基本的crud方法的編寫,所以我先看了以一下里面推薦的分頁器,這個分頁器的用法也是高度封裝了的,但是我們有一些查詢程式碼是沒有重構複用的,所以還是先不用它的。
所以後面決定還是用PageHelper來做。
1.引入外掛
引入分頁外掛有下面2種方式,推薦使用 Maven 方式。
1). 引入 Jar 包
你可以從下面的地址中下載最新版本的 jar 包
由於使用了sql 解析工具,你還需要下載 jsqlparser.jar(需要和PageHelper 依賴的版本一致) :
2). 使用 Maven
在 pom.xml 中新增如下依賴:
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版本</version> </dependency>
最新版本號可以從作者Github上可檢視。
不過官方推薦最新版本的似乎會和spring-boot有相容性問題,會出現不分頁的情況,我也踩了很多坑,最後選擇下面這兩者搭配,這種方法是起來是可執行的。其他的尚不確定。
<!-- spring-mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--pageHelper分頁外掛--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency>
2. 配置攔截器外掛
在application.yml中配置
# pageHelper分頁配置
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
3.程式碼中使用
後臺程式碼:
@GetMapping("/list")
public PageInfo<TbProject> listProject(String name, String type, int pageSize, int page) {
PageHelper.startPage(page + 1, pageSize);
Map map = new HashMap();
map.put("name", name);
map.put("type", type);
List<TbProject> tbProjects = proService.listProject(map);
PageInfo pageInfo = new PageInfo(tbProjects);
System.out.println("總數為:"+pageInfo.getTotal());
return pageInfo;
}
因為我的前臺使用的是elementUI,和pageHelper對於當前頁的處理有區別,所以對傳回來的當前頁進行加1處理。
在pageHelper呼叫了startPage方法後,會對後面第一個select查詢進行物理分頁,查詢的寫法和查詢所有資料一致。最後通過
PageInfo pageInfo = new PageInfo(tbProjects);將所有需要的資訊儲存到pageInfo 中返回到前臺。
前臺程式碼
getProList() {
this.axios({
method: 'get',
url: '/project/list',
params: {
'page': this.pageInfo.page,
'pageSize': this.pageInfo.pageSize,
'name': this.proName4search,
'type': this.selType,
}
}).then((response) => {
//可以在前臺控制檯上檢視返回的pageInfo中有哪些資料
console.log(response);
//通過list拿到目標頁的物件集合,total獲取到總數量
this.tableData = response.data.list;
this.total = response.data.total;
}).catch(error => {
this.$message.error(this.erroStr + error);
});
},
過程中遇到的問題:
1:在除錯的時候,不知道點了哪裡,idea一直報類似下面下面錯誤:
Error: Maven Resources Compiler: Failed to copy ‘E:\WorkSpace2016\Test\heaton\heaton-web\src\main\resources\dirty.txt’ to ‘E:\WorkSpace2016\Test\heaton\heaton-web\target\classes\dirty.txt’: E:\WorkSpace2016\Test\heaton\heaton-web\target\classes\dirty.txt (拒絕訪問。)
深層原因不太清楚,直接原因上面紫色部分檔案位置為只讀屬性,解決辦法是把它刪掉。如果出現無法刪除,可能是idea正在使用,關掉相應的程序或者重啟計算機。
2:在上傳svn的時候,萬惡的checkstyle一直不給我通過,一個儲存常量的公共類提示
Utility classes should not have a public or default constructor.
原來是沒有加私有的構造器,腦仁疼,被checkstyle各種稀奇古怪的錯誤折磨到死,已經失去了辨別能力了。
以上。
最後感謝外掛作者:Liuzh