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();
}