|
|
|
@ -0,0 +1,213 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* https://www.mall4j.com/
|
|
|
|
|
*
|
|
|
|
|
* 未经允许,不可做商业用途!
|
|
|
|
|
*
|
|
|
|
|
* 版权所有,侵权必究!
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package com.yami.shop.common.util;
|
|
|
|
|
|
|
|
|
|
// 导入MyBatis Plus框架中用于表示分页信息的核心类,包含了分页相关的属性(如当前页、每页大小等)以及操作方法(如获取记录列表、设置总数等)
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
// 导入Jackson相关的注解,用于在JSON序列化和反序列化过程中忽略指定的属性,这里用于标记某些属性在转换为JSON时不进行处理
|
|
|
|
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
|
|
|
// 导入Swagger相关的注解,用于在生成API文档时隐藏某些属性,使得这些属性不在文档中展示出来,一般用于内部使用或不需要对外暴露的属性
|
|
|
|
|
import io.swagger.v3.oas.annotations.Hidden;
|
|
|
|
|
// 导入Swagger相关的注解,用于在生成API文档时为类、属性等添加描述信息,方便前端开发人员等查看其含义和作用
|
|
|
|
|
import io.swagger.v3.oas.annotations.media.Schema;
|
|
|
|
|
// 导入SpringDoc相关的注解,用于标记该类作为参数对象,在生成API文档以及进行参数校验等场景下可以被识别和处理
|
|
|
|
|
import org.springdoc.core.annotations.ParameterObject;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PageParam类是一个泛型类,继承自MyBatis Plus的Page类,主要用于扩展和定制分页相关的功能及属性。
|
|
|
|
|
* 它在原有Page类的基础上,重新定义了一些分页属性(如每页显示条数、当前页等)的默认值,并对部分属性添加了文档注释以及JSON序列化相关的控制,
|
|
|
|
|
* 同时重写了Page类中的一些获取和设置属性的方法,以满足特定业务场景下对分页参数更灵活的控制和处理需求,
|
|
|
|
|
* 例如限制每页最大显示条数、根据总数情况判断是否进行count查询等功能。
|
|
|
|
|
*
|
|
|
|
|
* @author lanhai
|
|
|
|
|
*/
|
|
|
|
|
@Schema
|
|
|
|
|
@ParameterObject
|
|
|
|
|
public class PageParam<T> extends Page<T> {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 每页显示条数属性,用于指定每页展示的数据记录数量,默认值设置为10。
|
|
|
|
|
* 通过@Schema注解添加了描述信息,在生成API文档时可以展示该属性的含义,方便使用者了解其作用。
|
|
|
|
|
*/
|
|
|
|
|
@Schema(description = "每页大小,默认10")
|
|
|
|
|
private long size = 10;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 当前页属性,用于表示当前所处的页码,默认值设置为1,同样通过@Schema注解添加了描述信息以便在API文档中展示其含义。
|
|
|
|
|
*/
|
|
|
|
|
@Schema(description = "当前页,默认1")
|
|
|
|
|
private long current = 1;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用于存储查询到的数据记录列表,通过@Hidden注解标记该属性在生成API文档时隐藏起来,因为该属性通常是内部使用,不需要对外展示具体的数据内容。
|
|
|
|
|
*/
|
|
|
|
|
@Hidden
|
|
|
|
|
private List<T> records;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用于记录符合查询条件的数据总条数,通过@Hidden注解在生成API文档时隐藏该属性,它主要在内部用于分页相关的计算和判断等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Hidden
|
|
|
|
|
private long total = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 是否进行count查询的标志属性,用于控制在分页查询时是否需要统计符合条件的数据总条数,默认值为true,表示默认进行count查询。
|
|
|
|
|
* 通过@JsonIgnore注解标记该属性,在将对象转换为JSON时忽略该属性,因为它通常不需要在对外传输的数据中体现。
|
|
|
|
|
*/
|
|
|
|
|
@JsonIgnore
|
|
|
|
|
private boolean isSearchCount = true;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 一个用于特定场景的属性(具体功能可能根据业务而定),通过@JsonIgnore注解标记在JSON序列化时忽略该属性,一般是内部使用的标识信息等情况。
|
|
|
|
|
*/
|
|
|
|
|
@JsonIgnore
|
|
|
|
|
private String countId;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用于限制每页最大显示条数的属性(具体值在这里设置为100),通过@JsonIgnore注解在JSON序列化时忽略它,主要在内部用于对每页大小进行限制调整。
|
|
|
|
|
*/
|
|
|
|
|
@JsonIgnore
|
|
|
|
|
private Long maxLimit;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用于优化count查询SQL语句相关的属性(具体优化逻辑取决于具体业务实现),通过@JsonIgnore注解在JSON序列化时忽略它,也是内部使用的一个标识属性。
|
|
|
|
|
*/
|
|
|
|
|
@JsonIgnore
|
|
|
|
|
private boolean optimizeCountSql;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中获取记录列表的方法,返回当前对象中存储的记录列表(records属性),用于在业务逻辑中获取查询到的数据内容。
|
|
|
|
|
*
|
|
|
|
|
* @return List<T> 返回存储的数据记录列表,类型与泛型参数T一致,包含了符合查询条件的具体数据记录。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<T> getRecords() {
|
|
|
|
|
return this.records;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中设置记录列表的方法,将传入的记录列表赋值给当前对象的records属性,并返回当前对象(this),方便进行链式调用,
|
|
|
|
|
* 用于在查询到数据后更新对象中的记录列表信息,以便后续进行分页相关的处理和展示等操作。
|
|
|
|
|
*
|
|
|
|
|
* @param records 要设置的数据记录列表,类型与泛型参数T一致,通常是从数据库查询得到的符合条件的数据集合。
|
|
|
|
|
* @return Page<T> 返回当前对象本身,可用于链式调用,例如继续调用其他设置属性的方法等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<T> setRecords(List<T> records) {
|
|
|
|
|
this.records = records;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中获取数据总条数的方法,返回当前对象中存储的总条数(total属性),用于在分页相关的计算(如计算总页数等)以及业务判断中使用。
|
|
|
|
|
*
|
|
|
|
|
* @return long 返回符合查询条件的数据总条数,用于后续的分页逻辑处理。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public long getTotal() {
|
|
|
|
|
return this.total;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中设置数据总条数的方法,将传入的总条数赋值给当前对象的total属性,并返回当前对象(this),方便进行链式调用,
|
|
|
|
|
* 用于在获取到准确的总条数后更新对象中的相关信息,例如在执行完count查询后更新总条数用于后续的分页展示等操作。
|
|
|
|
|
*
|
|
|
|
|
* @param total 要设置的数据总条数,通过数据库查询或其他方式统计得到的符合条件的数据记录总数。
|
|
|
|
|
* @return Page<T> 返回当前对象本身,可用于链式调用,例如继续调用其他设置属性的方法等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<T> setTotal(long total) {
|
|
|
|
|
this.total = total;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取是否进行count查询的方法,在原有的isSearchCount属性基础上进行了额外的判断逻辑。
|
|
|
|
|
* 如果数据总条数(total属性)小于0,则返回false,表示不进行count查询(可能是因为数据不符合要求等情况);
|
|
|
|
|
* 否则返回isSearchCount属性的值,即按照默认或之前设置的值来确定是否进行count查询,用于在分页查询前根据实际情况灵活决定是否需要统计总数。
|
|
|
|
|
*
|
|
|
|
|
* @return boolean 返回是否进行count查询的结果,true表示进行count查询,false表示不进行,根据具体情况判断。
|
|
|
|
|
*/
|
|
|
|
|
@JsonIgnore
|
|
|
|
|
public boolean getSearchCount() {
|
|
|
|
|
if (total < 0) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return isSearchCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中设置是否进行count查询的方法,将传入的布尔值赋值给当前对象的isSearchCount属性,并返回当前对象(this),方便进行链式调用,
|
|
|
|
|
* 用于在业务逻辑中根据不同需求动态设置是否需要进行count查询操作,例如在某些特定条件下不需要统计总数时可以通过该方法进行设置。
|
|
|
|
|
*
|
|
|
|
|
* @param isSearchCount 要设置的是否进行count查询的布尔值,true表示进行,false表示不进行。
|
|
|
|
|
* @return Page<T> 返回当前对象本身,可用于链式调用,例如继续调用其他设置属性的方法等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<T> setSearchCount(boolean isSearchCount) {
|
|
|
|
|
this.isSearchCount = isSearchCount;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中获取每页显示条数的方法,返回当前对象中存储的每页显示条数(size属性),用于在分页相关的计算(如计算偏移量等)以及业务判断中使用。
|
|
|
|
|
*
|
|
|
|
|
* @return long 返回每页显示的数据记录数量,按照默认值或之前设置的值来确定,可用于后续的分页逻辑处理。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public long getSize() {
|
|
|
|
|
return this.size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中设置每页显示条数的方法,对传入的每页显示条数进行了限制处理。
|
|
|
|
|
* 如果传入的每页显示条数(size参数)大于预先设定的最大限制值(这里设置为100),则将当前对象的size属性设置为最大限制值(100),避免每页显示过多数据;
|
|
|
|
|
* 否则将传入的size值赋值给当前对象的size属性,用于在业务逻辑中根据实际需求动态设置每页显示的合理数量,然后返回当前对象(this)方便进行链式调用。
|
|
|
|
|
*
|
|
|
|
|
* @param size 要设置的每页显示条数,通过前端传入或业务逻辑指定的每页希望展示的数据记录数量。
|
|
|
|
|
* @return Page<T> 返回当前对象本身,可用于链式调用,例如继续调用其他设置属性的方法等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<T> setSize(long size) {
|
|
|
|
|
int maxSize = 100;
|
|
|
|
|
if (size > maxSize) {
|
|
|
|
|
this.size = maxSize;
|
|
|
|
|
} else {
|
|
|
|
|
this.size = size;
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中获取当前页的方法,返回当前对象中存储的当前页(current属性),用于在分页相关的计算(如计算偏移量等)以及业务判断中使用。
|
|
|
|
|
*
|
|
|
|
|
* @return long 返回当前所处的页码,按照默认值或之前设置的值来确定,可用于后续的分页逻辑处理。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public long getCurrent() {
|
|
|
|
|
return this.current;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写了父类Page中设置当前页的方法,将传入的当前页数值赋值给当前对象的current属性,并返回当前对象(this),方便进行链式调用,
|
|
|
|
|
* 用于在业务逻辑中根据实际需求动态设置当前所处的页码,例如响应前端传入的页码切换请求等操作。
|
|
|
|
|
*
|
|
|
|
|
* @param current 要设置的当前页数值,通过前端传入或业务逻辑指定的当前希望展示的页码。
|
|
|
|
|
* @return Page<T> 返回当前对象本身,可用于链式调用,例如继续调用其他设置属性的方法等操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<T> setCurrent(long current) {
|
|
|
|
|
this.current = current;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
}
|