All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.baomidou.mybatisplus.extension.plugins.pagination.Page Maven / Gradle / Ivy
/*
* Copyright (c) 2011-2022, baomidou ([email protected] ).
*
* 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.baomidou.mybatisplus.extension.plugins.pagination;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import lombok.Setter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;
/**
* 简单分页模型
*
* @author hubin
* @since 2018-06-09
*/
public class Page implements IPage {
private static final long serialVersionUID = 8545996863226528798L;
/**
* 查询数据列表
*/
protected List records = Collections.emptyList();
/**
* 总数
*/
protected long total = 0;
/**
* 每页显示条数,默认 10
*/
protected long size = 10;
/**
* 当前页
*/
protected long current = 1;
/**
* 排序字段信息
*/
@Setter
protected List orders = new ArrayList<>();
/**
* 自动优化 COUNT SQL
*/
protected boolean optimizeCountSql = true;
/**
* 是否进行 count 查询
*/
protected boolean searchCount = true;
/**
* {@link #optimizeJoinOfCountSql()}
*/
@Setter
protected boolean optimizeJoinOfCountSql = true;
/**
* countId
*/
@Setter
protected String countId;
/**
* countId
*/
@Setter
protected Long maxLimit;
public Page() {
}
/**
* 分页构造函数
*
* @param current 当前页
* @param size 每页显示条数
*/
public Page(long current, long size) {
this(current, size, 0);
}
public Page(long current, long size, long total) {
this(current, size, total, true);
}
public Page(long current, long size, boolean searchCount) {
this(current, size, 0, searchCount);
}
public Page(long current, long size, long total, boolean searchCount) {
if (current > 1) {
this.current = current;
}
this.size = size;
this.total = total;
this.searchCount = searchCount;
}
/**
* 是否存在上一页
*
* @return true / false
*/
public boolean hasPrevious() {
return this.current > 1;
}
/**
* 是否存在下一页
*
* @return true / false
*/
public boolean hasNext() {
return this.current < this.getPages();
}
@Override
public List getRecords() {
return this.records;
}
@Override
public Page setRecords(List records) {
this.records = records;
return this;
}
@Override
public long getTotal() {
return this.total;
}
@Override
public Page setTotal(long total) {
this.total = total;
return this;
}
@Override
public long getSize() {
return this.size;
}
@Override
public Page setSize(long size) {
this.size = size;
return this;
}
@Override
public long getCurrent() {
return this.current;
}
@Override
public Page setCurrent(long current) {
this.current = current;
return this;
}
@Override
public String countId() {
return this.countId;
}
@Override
public Long maxLimit() {
return this.maxLimit;
}
/**
* 查找 order 中正序排序的字段数组
*
* @param filter 过滤器
* @return 返回正序排列的字段数组
*/
private String[] mapOrderToArray(Predicate filter) {
List columns = new ArrayList<>(orders.size());
orders.forEach(i -> {
if (filter.test(i)) {
columns.add(i.getColumn());
}
});
return columns.toArray(new String[0]);
}
/**
* 移除符合条件的条件
*
* @param filter 条件判断
*/
private void removeOrder(Predicate filter) {
for (int i = orders.size() - 1; i >= 0; i--) {
if (filter.test(orders.get(i))) {
orders.remove(i);
}
}
}
/**
* 添加新的排序条件,构造条件可以使用工厂:{@link OrderItem#build(String, boolean)}
*
* @param items 条件
* @return 返回分页参数本身
*/
public Page addOrder(OrderItem... items) {
orders.addAll(Arrays.asList(items));
return this;
}
/**
* 添加新的排序条件,构造条件可以使用工厂:{@link OrderItem#build(String, boolean)}
*
* @param items 条件
* @return 返回分页参数本身
*/
public Page addOrder(List items) {
orders.addAll(items);
return this;
}
@Override
public List orders() {
return this.orders;
}
@Override
public boolean optimizeCountSql() {
return optimizeCountSql;
}
public static Page of(long current, long size, long total, boolean searchCount) {
return new Page<>(current, size, total, searchCount);
}
@Override
public boolean optimizeJoinOfCountSql() {
return optimizeJoinOfCountSql;
}
public Page setSearchCount(boolean searchCount) {
this.searchCount = searchCount;
return this;
}
public Page setOptimizeCountSql(boolean optimizeCountSql) {
this.optimizeCountSql = optimizeCountSql;
return this;
}
@Override
public long getPages() {
// 解决 github issues/3208
return IPage.super.getPages();
}
/* --------------- 以下为静态构造方式 --------------- */
public static Page of(long current, long size) {
return of(current, size, 0);
}
public static Page of(long current, long size, long total) {
return of(current, size, total, true);
}
public static Page of(long current, long size, boolean searchCount) {
return of(current, size, 0, searchCount);
}
@Override
public boolean searchCount() {
if (total < 0) {
return false;
}
return searchCount;
}
/**
* --begin------------- 未来抛弃移除的方法 -------------begin--
* 该部分属性转移至 {@link PageDTO}
*/
@Deprecated
public String getCountId() {
return this.countId;
}
@Deprecated
public Long getMaxLimit() {
return this.maxLimit;
}
@Deprecated
public List getOrders() {
return this.orders;
}
@Deprecated
public boolean isOptimizeCountSql() {
return this.optimizeCountSql;
}
@Deprecated
public boolean isSearchCount() {
return this.searchCount;
}
/** --end------------- 未来抛弃移除的方法 -------------end-- */
}