之前寫過一篇mybatis-plus的文章,但是有朋友說技術太過簡單了,想讓我寫一下分頁什麼的技術,這裏想跟大家解釋一下:因爲剛開始在這種平臺上寫文章,確實是寫的慢,並且,有些技術我自己也沒怎麼使用過,就是一邊學習,覺得不錯,然後就寫上來,或者工作中剛好用到,就把代碼粘貼上來(在不違反公司規定的情況下,因爲我所在的公司有點特殊,程序猿朋友應該都懂),之前看人家寫的感覺挺簡單的,但實際真的不是那麼簡單,非常耗費時間和精力,所以,希望大家有什麼問題可以在文章下方討論,想要看什麼技術我在有時間的情況下也會進行更新的,大家一起努力學習,畢竟我也不是什麼特別牛逼的大神,彆着急哈
今天我從我的git中截取了部分通過SpringBoot實現分頁的代碼,希望對大家有所幫助,覺得有幫助的麻煩點個關注,謝謝
首先是我從網上找到的一般分頁的代碼(對於基礎的朋友可以看一下,有工作經驗的可以劃過,謝謝)
1 public class PageBean {
2 private int curPage; //當前頁
3 private int pageCount; //總頁數
4 private int rowsCount; //總行數
5 private int pageSize=10; //每頁多少行
6
7
8
9 public PageBean(int rows){
10
11 this.setRowsCount(rows);
12 if(this.rowsCount % this.pageSize == 0){
13 this.pageCount=this.rowsCount / this.pageSize;
14 }
15 else if(rows<this.pageSize){
16 this.pageCount=1;
17 }
18 else{
19 this.pageCount=this.rowsCount / this.pageSize +1;
20 }
21 }
22
23
24 public int getCurPage() {
25 return curPage;
26 }
27 public void setCurPage(int curPage) {
28 this.curPage = curPage;
29 }
30 public int getPageCount() {
31 return pageCount;
32 }
33 public void setPageCount(int pageCount) {
34 this.pageCount = pageCount;
35 }
36 public int getPageSize() {
37 return pageSize;
38 }
39 public void setPageSize(int pageSize) {
40 this.pageSize = pageSize;
41 }
42 public int getRowsCount() {
43 return rowsCount;
44 }
45 public void setRowsCount(int rowsCount) {
46 this.rowsCount = rowsCount;
47 }
48 }
分頁展示如下:
1 List clist=adminbiz.queryNotFullCourse();//將查詢結果存放在List集合裏
2 PageBean pagebean=new PageBean(clist.size());//初始化PageBean對象
3 //設置當前頁
4 pagebean.setCurPage(page); //這裏page是從頁面上獲取的一個參數,代表頁數
5 //獲得分頁大小
6 int pagesize=pagebean.getPageSize();
7 //獲得分頁數據在list集合中的索引
8 int firstIndex=(page-1)*pagesize;
9 int toIndex=page*pagesize;
10 if(toIndex>clist.size()){
11 toIndex=clist.size();
12 }
13 if(firstIndex>toIndex){
14 firstIndex=0;
15 pagebean.setCurPage(1);
16 }
17 //截取數據集合,獲得分頁數據
18 List courseList=clist.subList(firstIndex, toIndex);
接下來是重頭戲,就是通過SpringBoot使用Pageable實現分頁,由於之前在項目中用到過這個,就覺得不錯,我就稍微的整理了一下然後簡單記錄到Git中,今天剛好,拿出來分享給大家(更多的是提供一個思路,不是完整的代碼,不好意思)
在此記錄一下操作案例。
Pageable pageable = new PageRequest(page, size, Sort.Direction.DESC, "key");
下面簡單介紹一下上面的這一行代碼:
Pageable 必須引用spring的包。否則後面是不能new PageRequest的!!!!
page即當前頁。size代表每頁有幾條記錄。第三個參數是排序字段, Sort.Direction.DESC是倒序的意思。最後一個參數是排序關鍵字,將按照這個關鍵字進行排序。
介紹完這個方法本身,下面介紹數據庫操作。使用Pageable 時不能使用原生sql。但是這個地方我遇到一個問題:官網說能用原生的,我也百度了許多的例子,但是都運行不起來。當時爲了完成任務我就用了我自己的辦法,後來也就因爲工作忙我就放下沒在研究,有知道的朋友下方可以評論區告訴我,謝謝,下面講我的辦法:
@Query(" from LoginTable k where k.loginName = ?1")
public Page<LoginTable> getLoginInfo(String loginName, Pageable pageable);
不用在@Query中使用value=和nativeQuery = true形參裏面加一個Pageable pageable使用實體類的類型:LoginTable ,而不是數據庫類型:login_table接收參數使用Page<>,而不是List<>表名起別名,通過別名去調用。(我遇到的問題,不起別名調不到)
數據庫操作介紹完了,下面介紹一下調用:
Page<LoginTable> pageList = loginRepository.getLoginInfo(loginName,pageable);
依舊使用Page接收形參加pageable(此時的pageable應該是已經定義好的,有當前頁,頁容量,排序字段等屬性)
後期我回去更新上來,覺得今天的文章有點幫助的,幫忙點個關注支持一下,有更好的實現方式的,可以評論區和我說,我的那個問題也可以和我討論一下呀,大家一起成長
關注公衆號:Java架構師聯盟,每日跟新技術好文