diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java index 06f55fdf..49a22333 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java @@ -843,6 +843,11 @@ public interface BaseMapper { return paginate(page, queryWrapper); } + default Page paginateWithRelations(int pageNumber, int pageSize, QueryWrapper queryWrapper) { + Page page = new Page<>(pageNumber, pageSize); + return paginateWithRelations(page, queryWrapper); + } + /** * 根据条件分页查询 @@ -857,6 +862,11 @@ public interface BaseMapper { return paginate(page, new QueryWrapper().where(condition)); } + default Page paginateWithRelations(int pageNumber, int pageSize, QueryCondition condition) { + Page page = new Page<>(pageNumber, pageSize); + return paginateWithRelations(page, new QueryWrapper().where(condition)); + } + /** * 分页查询 * @@ -871,6 +881,11 @@ public interface BaseMapper { return paginate(page, queryWrapper); } + default Page paginateWithRelations(int pageNumber, int pageSize, int totalRow, QueryWrapper queryWrapper) { + Page page = new Page<>(pageNumber, pageSize, totalRow); + return paginateWithRelations(page, queryWrapper); + } + /** * 根据条件分页查询 @@ -890,6 +905,15 @@ public interface BaseMapper { } + default Page paginateWithRelations(int pageNumber, int pageSize, int totalRow, QueryCondition condition) { + if (condition == null) { + throw FlexExceptions.wrap("condition can not be null."); + } + Page page = new Page<>(pageNumber, pageSize, totalRow); + return paginateWithRelations(page, new QueryWrapper().where(condition)); + } + + /** * 分页查询 * @@ -902,8 +926,21 @@ public interface BaseMapper { return paginateAs(page, queryWrapper, null, consumers); } + default Page paginateWithRelations(Page page, QueryWrapper queryWrapper, Consumer>... consumers) { + return doPaginate(page, queryWrapper, null, true, consumers); + } + default Page paginateAs(Page page, QueryWrapper queryWrapper, Class asType, Consumer>... consumers) { + return doPaginate(page, queryWrapper, asType, false, consumers); + } + + default Page paginateWithRelationsAs(Page page, QueryWrapper queryWrapper, Class asType, Consumer>... consumers) { + return doPaginate(page, queryWrapper, asType, true, consumers); + } + + + default Page doPaginate(Page page, QueryWrapper queryWrapper, Class asType, boolean withRelations, Consumer>... consumers) { try { // 只有 totalRow 小于 0 的时候才会去查询总量 // 这样方便用户做总数缓存,而非每次都要去查询总量 @@ -930,6 +967,11 @@ public interface BaseMapper { } else { records = (List) selectListByQuery(queryWrapper); } + + if (withRelations) { + MapperUtil.queryRelations(this, records); + } + MapperUtil.queryFields(this, records, consumers); page.setRecords(records);