這篇文章主要為大家詳細(xì)介紹了如何在spring-boot中將List轉(zhuǎn)換為Page,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,發(fā)現(xiàn)的小伙伴們可以參考一下:
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司,提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
需求:班級與教師是多對多
關(guān)系,在后臺班級管理需要添加一個接口,傳入教師的id和pageable,返回帶分頁數(shù)據(jù)的班級信息。
PagepageByTeacher(Long teacherId, Pageable pageable);
一開始打算是在KlassRepository(繼承自PagingAndSortingRepository)中添加一個類似findByElementId的接口,然后直接返回帶分頁的數(shù)據(jù)。但是試了幾次并不成功,無論是把teacher還是將帶teacher的List傳入方法中都失敗。
換了一種思路,直接調(diào)TeacherRepository的FindById()方法找到teacher,然后返回teacher的成員klassList就行了。
Teacher teacher = teacherRepository.findById(teacherId).get(); ListklassList = teacher.getKlassList();
但是光返回klassList還不行,需要將它包裝成Page才行,去官網(wǎng)上查到了一種使用List構(gòu)造Page
的方法
PageImpl
public PageImpl(Listcontent,
Pageable pageable,
long total)
Constructor of PageImpl.
Parameters:
content - the content of this page, must not be null.
pageable - the paging information, must not be null.
total - the total amount of items available. The total might be adapted considering the length of the content given, if it is going to be the content of the last page. This is in place to mitigate inconsistencies.
參數(shù):
content
: 要傳的List,不為空
pageable
: 分頁信息,不為空
total
: 可用項的總數(shù)。如果是最后一頁,考慮到給定內(nèi)容的長度,total可以被調(diào)整。這是為了緩解不一致性。(這句沒懂什么意思),可選
一開始還以為它會自己按照傳入的參數(shù)分割List
PageklassPage = new PageImpl (klassList, pageable, klassList.size());
結(jié)果debug發(fā)現(xiàn)不行,得手動分割,就去網(wǎng)上參考了別人的寫法
// 當(dāng)前頁第一條數(shù)據(jù)在List中的位置 int start = (int)pageable.getOffset(); // 當(dāng)前頁最后一條數(shù)據(jù)在List中的位置 int end = (start + pageable.getPageSize()) > klassList.size() ? klassList.size() : ( start + pageable.getPageSize()); // 配置分頁數(shù)據(jù) PageklassPage = new PageImpl (klassList.subList(start, end), pageable, klassList.size());
debug查看結(jié)果
最后為了增加復(fù)用性,改成范型方法:
publicPage listConvertToPage(List list, Pageable pageable) { int start = (int)pageable.getOffset(); int end = (start + pageable.getPageSize()) > list.size() ? list.size() : ( start + pageable.getPageSize()); return new PageImpl (list.subList(start, end), pageable, list.size()); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。