diff --git a/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/PageQuery.java b/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/PageQuery.java index 6b5ab1c4..0f56ba6c 100644 --- a/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/PageQuery.java +++ b/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/PageQuery.java @@ -20,6 +20,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import org.hibernate.validator.constraints.Range; import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Sort; import java.io.Serial; @@ -35,10 +36,12 @@ public class PageQuery extends SortQuery { @Serial private static final long serialVersionUID = 1L; + /** * 默认页码:1 */ private static final int DEFAULT_PAGE = 1; + /** * 默认每页条数:10 */ @@ -58,6 +61,123 @@ public class PageQuery extends SortQuery { @Range(min = 1, max = 1000, message = "每页条数(取值范围 {min}-{max})") private Integer size = DEFAULT_SIZE; + public PageQuery() { + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery(1, 10)} + *

+ * + * @param page 页码 + * @param size 每页条数 + * @since 2.12.0 + */ + public PageQuery(Integer page, Integer size) { + this.page = page; + this.size = size; + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery(1, 10, "createTime,desc", "name,asc")} + *

+ * + * @param page 页码 + * @param size 每页条数 + * @param sort 排序 + * @since 2.12.0 + */ + public PageQuery(Integer page, Integer size, String... sort) { + super(sort); + this.page = page; + this.size = size; + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery("createTime,desc", "name,asc")} + *

+ * + * @param sort 排序 + * @since 2.12.0 + */ + public PageQuery(String... sort) { + super(sort); + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery("createTime", Sort.Direction.DESC)} + *

+ * + * @param field 字段 + * @param direction 排序方向 + * @since 2.12.0 + */ + public PageQuery(String field, Sort.Direction direction) { + super(field, direction); + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery(Sort.by(Sort.Direction.DESC, "createTime"))} + *

+ * + * @param sort 排序 + * @since 2.12.0 + */ + public PageQuery(Sort sort) { + super(sort); + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery(1, 10, "createTime", Sort.Direction.DESC)} + *

+ * + * @param page 页码 + * @param size 每页条数 + * @param field 字段 + * @param direction 排序方向 + * @since 2.12.0 + */ + public PageQuery(Integer page, Integer size, String field, Sort.Direction direction) { + super(field, direction); + this.page = page; + this.size = size; + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new PageQuery(1, 10, Sort.by(Sort.Direction.DESC, "createTime"))} + *

+ * + * @param page 页码 + * @param size 每页条数 + * @param sort 排序 + * @since 2.12.0 + */ + public PageQuery(Integer page, Integer size, Sort sort) { + super(sort); + this.page = page; + this.size = size; + } + public Integer getPage() { return page; } diff --git a/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/SortQuery.java b/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/SortQuery.java index ac69f913..2c973ada 100644 --- a/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/SortQuery.java +++ b/continew-starter-extension/continew-starter-extension-crud/continew-starter-extension-crud-core/src/main/java/top/continew/starter/extension/crud/model/query/SortQuery.java @@ -47,6 +47,58 @@ public class SortQuery implements Serializable { @Schema(description = "排序条件", example = "createTime,desc") private String[] sort; + public SortQuery() { + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new SortQuery("createTime,desc", "name,asc")} + *

+ * + * @param sort 排序条件 + * @since 2.12.0 + */ + public SortQuery(String... sort) { + this.sort = sort; + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new SortQuery("createTime", Sort.Direction.DESC)} + *

+ * + * @param field 字段 + * @param direction 排序方向 + * @since 2.12.0 + */ + public SortQuery(String field, Sort.Direction direction) { + this(field + StringConstants.COMMA + direction.name().toLowerCase()); + } + + /** + * 构造方法 + * + *

+ * 示例:{@code new SortQuery(Sort.by(Sort.Order.desc("createTime")))} + *

+ * + * @param sort 排序条件 + * @since 2.12.0 + */ + public SortQuery(Sort sort) { + if (sort == null || sort.isUnsorted()) { + this.sort = null; + return; + } + this.sort = sort.stream() + .map(order -> order.getProperty() + StringConstants.COMMA + order.getDirection().name().toLowerCase()) + .toArray(String[]::new); + } + /** * 解析排序条件为 Spring 分页排序实体 *