diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/IPage.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/IPage.java new file mode 100644 index 00000000..ddf25861 --- /dev/null +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/IPage.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.mybatisflex.core.paginate; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页接口。 + * + * @param 数据类型 + * @author 王帅 + * @since 2023-06-18 + */ +public interface IPage extends Serializable { + + /** + * 获取当前页码。 + * + * @return 页码 + */ + int getPageNumber(); + + /** + * 设置当前页码。 + * + * @param pageNumber 页码 + */ + void setPageNumber(int pageNumber); + + /** + * 获取当前每页数据数量。 + * + * @return 每页数据数量 + */ + int getPageSize(); + + /** + * 设置当前每页数据数量。 + * + * @param pageSize 每页数据数量 + */ + void setPageSize(int pageSize); + + /** + * 获取数据总数。 + * + * @return 数据总数 + */ + long getTotalRow(); + + /** + * 设置数据总数。 + * + * @param totalRow 数据总数 + */ + void setTotalRow(long totalRow); + + /** + * 获取当前页的数据。 + * + * @return 当前页的数据 + */ + List getRecords(); + + /** + * 设置当前页的数据。 + * + * @param records 当前页的数据 + */ + void setRecords(List records); + + /** + * 获取总页数。 + * + * @return 总页数 + */ + default long getTotalPage() { + // 实时计算总页数 + int pageSize = getPageSize(); + if (pageSize == 0) { + return 0L; + } + long totalRow = getTotalRow(); + long totalPage = totalRow / pageSize; + if (totalRow % pageSize != 0) { + totalPage++; + } + return totalPage; + } + + /** + * 设置总页数。 + * + * @param totalPage 总页数 + */ + default void setTotalPage(long totalPage) { + // 总页数是实时计算的,所以这里设置了也没用。 + } + + /** + * 是否存在上一页。 + * + * @return {@code true} 存在上一页,{@code false} 不存在上一页 + */ + default boolean hasPrevious() { + return getPageNumber() > 1; + } + + /** + * 是否存在下一页。 + * + * @return {@code true} 存在下一页,{@code false} 不存在下一页 + */ + default boolean hasNext() { + return getPageNumber() < getTotalPage(); + } + + /** + * 当前页是否为空。 + * + * @return {@code true} 空页,{@code false} 非空页 + */ + default boolean isEmpty() { + return getTotalRow() == 0 || getPageNumber() > getTotalPage(); + } + +} \ No newline at end of file diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/Page.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/Page.java index 8b4e75d2..e8be0587 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/Page.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/paginate/Page.java @@ -15,13 +15,12 @@ */ package com.mybatisflex.core.paginate; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; -public class Page implements Serializable { +public class Page implements IPage { private static final long serialVersionUID = 1L; public static final int INIT_VALUE = -1; @@ -64,10 +63,12 @@ public class Page implements Serializable { } + @Override public List getRecords() { return records; } + @Override public void setRecords(List records) { if (records == null) { records = Collections.emptyList(); @@ -75,10 +76,12 @@ public class Page implements Serializable { this.records = records; } + @Override public int getPageNumber() { return pageNumber; } + @Override public void setPageNumber(int pageNumber) { if (pageNumber < 1) { throw new IllegalArgumentException("pageNumber must greater than or equal 1,current value is: " + pageNumber); @@ -87,10 +90,12 @@ public class Page implements Serializable { } + @Override public int getPageSize() { return pageSize; } + @Override public void setPageSize(int pageSize) { if (pageSize < 0) { throw new IllegalArgumentException("pageSize must greater than or equal 0,current value is: " + pageSize); @@ -99,18 +104,22 @@ public class Page implements Serializable { this.calcTotalPage(); } + @Override public long getTotalPage() { return totalPage; } + @Override public void setTotalPage(long totalPage) { this.totalPage = totalPage; } + @Override public long getTotalRow() { return totalRow; } + @Override public void setTotalRow(long totalRow) { this.totalRow = totalRow; this.calcTotalPage(); @@ -127,10 +136,12 @@ public class Page implements Serializable { } } + @Override public boolean isEmpty() { return getTotalRow() == 0 || getPageNumber() > getTotalPage(); } + @Override public boolean hasNext() { return getTotalPage() != 0 && getPageNumber() < getTotalPage(); }