問題篇:附源碼詢問Pageable實現分頁無法使用原生sql

之前寫過一篇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架構師聯盟,每日跟新技術好文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章