基于guava的通用分页工具
后台通用分页工具:
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])