后台通用分頁工具:
1、提高查詢性能、優化查詢效率。
2、使用vue+elementUI,前端分頁樣式統一,使前端同學更關注頁面優化、減少數據處理邏輯。
3、提供統一的分頁工具,便於維護,同時使后端同學更加關注業務處理。
4、支持數據的模糊分頁查詢。
1、封裝返回數據結果集合:
import lombok.Data; import java.util.Collections; import java.util.List; /** * @author yanyapan * @param <T> */ @Data public class PageModel<T> { /** * 當前頁 */ private int currentPage; /** * 總頁數 */ private int totalPage; /** * 頁面容量 */ private int pageSize; /** * 總數據數 */ private int totalRecordCount; /** * 當前頁數據集 */ private List<T> records = Collections.emptyList(); public static <T> PageModel<T> build(List<T> records, int current, int totalRecordCount, int pageSize) { PageModel<T> pageModel = new PageModel<T>(); pageModel.setCurrentPage(current); pageModel.setPageSize(pageSize); pageModel.setRecords(records); pageModel.setTotalRecordCount(totalRecordCount); int pages = totalRecordCount / pageSize; pageModel.setTotalPage((totalRecordCount) % pageSize == 0 ? pages : (pages + 1)); return pageModel; } public static<T> PageModel<T> emptyPageModel() { return new PageModel(); } }
2、分頁工具類:
import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import java.util.List; /** * @author yanyapan */ public class PaginationUtil { /** * 通用分頁工具類 * @param data * @param pageSize * @param pageNum * @param <T> * @return */ public static <T> PageModel<T> pagination(final List<T> data, final int pageSize, final int pageNum) { if (CollectionUtils.isEmpty(data)) { return PageModel.emptyPageModel(); } List<List<T>> lists = Lists.partition(data, pageSize); int localPageNum = pageNum; if (localPageNum > lists.size()) { localPageNum = lists.size(); } return PageModel.build(lists.get(localPageNum - 1), pageNum, data.size(), pageSize); } }
3、測試:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for(int i = 0;i < 100;i++){
list.add(String.valueOf(i));
}
PageModel<String> pagination = PaginationUtil.pagination(list, 10, 1);
System.out.println(pagination);
}
}
PageModel(currentPage=1, totalPage=10, pageSize=10, totalRecordCount=100, records=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])