001/** 002 * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.mybatisflex.core.paginate; 017 018import java.io.Serializable; 019import java.util.ArrayList; 020import java.util.Collections; 021import java.util.List; 022import java.util.function.Function; 023 024public class Page<T> implements Serializable { 025 026 private static final long serialVersionUID = 1L; 027 private static final int INIT_VALUE = -1; 028 029 private List<T> records = Collections.emptyList(); 030 private int pageNumber = INIT_VALUE; 031 private int pageSize = INIT_VALUE; 032 private long totalPage = INIT_VALUE; 033 private long totalRow = INIT_VALUE; 034 035 public static Page of(int pageNumber, int pageSize) { 036 return new Page(pageNumber, pageSize); 037 } 038 039 public static Page of(int pageNumber, int pageSize, long totalRow) { 040 return new Page(pageNumber, pageSize, totalRow); 041 } 042 043 public Page() { 044 045 } 046 047 public Page(int pageNumber, int pageSize) { 048 this.pageNumber = pageNumber; 049 this.pageSize = pageSize; 050 } 051 052 public Page(int pageNumber, int pageSize, long totalRow) { 053 this.pageNumber = pageNumber; 054 this.pageSize = pageSize; 055 this.totalRow = totalRow; 056 this.totalPage = totalRow % pageSize == 0 ? (totalRow / pageSize) : (totalRow / pageSize + 1); 057 } 058 059 public Page(List<T> records, int pageNumber, int pageSize, long totalRow) { 060 this.records = records; 061 this.pageNumber = pageNumber; 062 this.pageSize = pageSize; 063 this.totalRow = totalRow; 064 this.totalPage = totalRow % pageSize == 0 ? (totalRow / pageSize) : (totalRow / pageSize + 1); 065 } 066 067 068 public List<T> getRecords() { 069 return records; 070 } 071 072 public void setRecords(List<T> records) { 073 this.records = records; 074 } 075 076 public int getPageNumber() { 077 return pageNumber; 078 } 079 080 public void setPageNumber(int pageNumber) { 081 this.pageNumber = pageNumber; 082 } 083 084 085 public int getPageSize() { 086 return pageSize; 087 } 088 089 public void setPageSize(int pageSize) { 090 this.pageSize = pageSize; 091 } 092 093 public long getTotalPage() { 094 return totalPage; 095 } 096 097 public void setTotalPage(long totalPage) { 098 this.totalPage = totalPage; 099 } 100 101 public long getTotalRow() { 102 return totalRow; 103 } 104 105 public void setTotalRow(long totalRow) { 106 this.totalRow = totalRow; 107 this.totalPage = totalRow % pageSize == 0 ? (totalRow / pageSize) : (totalRow / pageSize + 1); 108 } 109 110 public <R> Page<R> map(Function<? super T, ? extends R> mapper) { 111 Page<R> newPage = new Page<>(); 112 newPage.pageNumber = pageNumber; 113 newPage.pageSize = pageSize; 114 newPage.totalPage = totalPage; 115 newPage.totalRow = totalRow; 116 117 if (records != null) { 118 List<R> newRecords = new ArrayList<>(records.size()); 119 for (T t : records) { 120 newRecords.add(mapper.apply(t)); 121 } 122 newPage.records = newRecords; 123 } 124 return newPage; 125 } 126 127 128 @Override 129 public String toString() { 130 return "Page{" + 131 "pageNumber=" + pageNumber + 132 ", pageSize=" + pageSize + 133 ", totalPage=" + totalPage + 134 ", totalRow=" + totalRow + 135 ", records=" + records + 136 '}'; 137 } 138}