refactor: 定义 IPage 分页接口。

This commit is contained in:
Suomm 2023-06-18 16:37:19 +08:00
parent 209ec6ab60
commit 859c2a601a
2 changed files with 155 additions and 2 deletions

View File

@ -0,0 +1,142 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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 <T> 数据类型
* @author 王帅
* @since 2023-06-18
*/
public interface IPage<T> 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<T> getRecords();
/**
* 设置当前页的数据
*
* @param records 当前页的数据
*/
void setRecords(List<T> 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();
}
}

View File

@ -15,13 +15,12 @@
*/ */
package com.mybatisflex.core.paginate; package com.mybatisflex.core.paginate;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class Page<T> implements Serializable { public class Page<T> implements IPage<T> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public static final int INIT_VALUE = -1; public static final int INIT_VALUE = -1;
@ -64,10 +63,12 @@ public class Page<T> implements Serializable {
} }
@Override
public List<T> getRecords() { public List<T> getRecords() {
return records; return records;
} }
@Override
public void setRecords(List<T> records) { public void setRecords(List<T> records) {
if (records == null) { if (records == null) {
records = Collections.emptyList(); records = Collections.emptyList();
@ -75,10 +76,12 @@ public class Page<T> implements Serializable {
this.records = records; this.records = records;
} }
@Override
public int getPageNumber() { public int getPageNumber() {
return pageNumber; return pageNumber;
} }
@Override
public void setPageNumber(int pageNumber) { public void setPageNumber(int pageNumber) {
if (pageNumber < 1) { if (pageNumber < 1) {
throw new IllegalArgumentException("pageNumber must greater than or equal 1current value is: " + pageNumber); throw new IllegalArgumentException("pageNumber must greater than or equal 1current value is: " + pageNumber);
@ -87,10 +90,12 @@ public class Page<T> implements Serializable {
} }
@Override
public int getPageSize() { public int getPageSize() {
return pageSize; return pageSize;
} }
@Override
public void setPageSize(int pageSize) { public void setPageSize(int pageSize) {
if (pageSize < 0) { if (pageSize < 0) {
throw new IllegalArgumentException("pageSize must greater than or equal 0current value is: " + pageSize); throw new IllegalArgumentException("pageSize must greater than or equal 0current value is: " + pageSize);
@ -99,18 +104,22 @@ public class Page<T> implements Serializable {
this.calcTotalPage(); this.calcTotalPage();
} }
@Override
public long getTotalPage() { public long getTotalPage() {
return totalPage; return totalPage;
} }
@Override
public void setTotalPage(long totalPage) { public void setTotalPage(long totalPage) {
this.totalPage = totalPage; this.totalPage = totalPage;
} }
@Override
public long getTotalRow() { public long getTotalRow() {
return totalRow; return totalRow;
} }
@Override
public void setTotalRow(long totalRow) { public void setTotalRow(long totalRow) {
this.totalRow = totalRow; this.totalRow = totalRow;
this.calcTotalPage(); this.calcTotalPage();
@ -127,10 +136,12 @@ public class Page<T> implements Serializable {
} }
} }
@Override
public boolean isEmpty() { public boolean isEmpty() {
return getTotalRow() == 0 || getPageNumber() > getTotalPage(); return getTotalRow() == 0 || getPageNumber() > getTotalPage();
} }
@Override
public boolean hasNext() { public boolean hasNext() {
return getTotalPage() != 0 && getPageNumber() < getTotalPage(); return getTotalPage() != 0 && getPageNumber() < getTotalPage();
} }