@TOC
問題背景
由于xml中寫了一個多表關(guān)聯(lián)的sql語句魏颓,并且是多對多岭辣,導(dǎo)致查詢出來的是有自己不需要的重復(fù)語句,更坑的是甸饱,可能sql自己寫得瀾沦童,去重功能distinct和order by在特殊條件下不能同時使用,報錯:Expression #1 of ORDER BY clause is not in SELECT list, references column 'fusion.m.create_time' which is not in SELECT list; this is incompatible with DISTINCT叹话,所以我是把所有數(shù)據(jù)查詢出來之后偷遗,自己做了一個去重,再進(jìn)行分頁驼壶,如果使用插件的分頁氏豌,一開始就會把分頁設(shè)置傳入進(jìn)去,出來的時候分頁是帶重復(fù)的數(shù)據(jù)热凹,這個時候去重泵喘,頁面顯示出來的就沒有一開始傳入的分頁參數(shù)這么多瞭吃,比如每頁需要顯示20條,這個時候就只剩10條了
PageUtils分頁工具類
1 分頁方法
package com.dz.fusion.support.common;
import java.util.ArrayList;
import java.util.List;
/**
* @Author suolong
* @Date 2022/7/6 19:05
* @Version 2.0
*/
@Data
public class PageUtils<T> {
private List<T> pages; //數(shù)據(jù)
private long totalCount; //總數(shù)
private int pageIndex; //當(dāng)前頁
private int totalPages; //總頁數(shù)
/**
* <p>分頁方法</p>
* <p>參數(shù)(當(dāng)前頁碼涣旨,每頁行數(shù))</p>
* <p>返回 pages 數(shù)據(jù)</p>
* <p> totalCount 總數(shù)</p>
* <p> pageIndex 當(dāng)前頁</p>
* <p> totalPages 總頁數(shù)</p>
*/
public PageUtils(int pageIndex, int hang, List<T> pages) {
int fist = pageIndex * hang - hang; //獲取當(dāng)前頁的第一行下標(biāo)
int last = pageIndex * hang; //獲取當(dāng)前頁的最后一行下標(biāo)+1
if (last > pages.size()) last = pages.size();
List<T> page = new ArrayList<T>();
for (int s = fist; s < last; s++) {
page.add(pages.get(s));
}
this.pages = page; //分頁數(shù)據(jù)
this.totalCount = pages.size(); //總行數(shù)
this.pageIndex = pageIndex; //當(dāng)前頁
this.totalPages = (int) Math.ceil((float) pages.size() / hang); //總頁數(shù)
}
}
2 使用方式
List<User> list= baseMapper.selectList();
PageUtils<User> userPages = new PageUtils<>(頁碼, 每頁行數(shù), list);
long totalCount = userPages.getTotalCount(); //總行數(shù)
List<User> records = userPages .getPages(); //每頁的數(shù)據(jù)
作為程序員第 197 篇文章,每次寫一句歌詞記錄一下股冗,看看人生有幾首歌的時間霹陡,wahahaha ...