selectJoinPage 方法,支持带有排序参数的分页查询

更新了 BaseMapperX 接口的文档说明,使其更加清晰。新增了一个 `selectJoinPage` 方法,支持带有排序参数的分页查询,并兼容不分页的情况。
This commit is contained in:
guanghui 2025-11-07 11:00:58 +08:00
parent 2c41d5622c
commit 43372dc511

View File

@ -24,10 +24,10 @@ import java.util.Collection;
import java.util.List;
/**
* MyBatis Plus BaseMapper 的基础上拓展提供更多的能力
* BaseMapperX 是一个泛型接口继承自 MPJBaseMapper用于提供一系列便捷的数据库操作方法
* 该接口主要包含分页查询单条记录查询多条记录查询批量插入等常用操作
*
* 1. {@link BaseMapper} MyBatis Plus 的基础接口提供基础的 CRUD 能力
* 2. {@link MPJBaseMapper} MyBatis Plus Join 的基础接口提供连表 Join 能力
* @param <T> 实体类型
*/
public interface BaseMapperX<T> extends MPJBaseMapper<T> {
@ -68,6 +68,29 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
}
/**
* 执行分页查询并返回结果
*
* @param pageParam 分页参数包含页码每页条数和排序字段信息如果 pageSize {@link PageParam#PAGE_SIZE_NONE}则不分页直接查询所有数据
* @param clazz 结果集的类类型
* @param lambdaWrapper MyBatis Plus Join 查询条件包装器
* @param <D> 结果集的泛型类型
* @return 返回分页查询的结果包括总记录数和当前页的数据列表
*/
default <D> PageResult<D> selectJoinPage(SortablePageParam pageParam, Class<D> clazz, MPJLambdaWrapper<T> lambdaWrapper) {
// 特殊不分页直接查询全部
if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
List<D> list = selectJoinList(clazz, lambdaWrapper);
return new PageResult<>(list, (long) list.size());
}
// MyBatis Plus Join 查询
IPage<D> mpPage = MyBatisUtils.buildPage(pageParam, pageParam.getSortingFields());
mpPage = selectJoinPage(mpPage, clazz, lambdaWrapper);
// 转换返回
return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
}
default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Class<DTO> resultTypeClass, MPJBaseJoin<T> joinQueryWrapper) {
IPage<DTO> mpPage = MyBatisUtils.buildPage(pageParam);
selectJoinPage(mpPage, resultTypeClass, joinQueryWrapper);