分页功能
重点说明
项目使用 pagehelper 分页插件 实现分页功能
同时也支持mybatis-plus
分页插件 实现分页功能 大致用法与 MP 一致 MP分页文档
项目禁止分页合理化 页数溢出 例如: 一共5页 查了第6页 默认返回空数据
使用pagehelper插件分页
使用
PageQuery
接收分页参数,确保请求参数携带pageNum
与pageSize
具体参数参考PageQuery
使用SortQuery
接收排序参数,确保请求参数携带orderByColumn
与isAsc
具体参数参考SortQuery
java
@Override
public TableDataInfo<SysAppVo> queryPageList(SysAppQuery query) {
// 注意:PageQuery#of 方法只会对第一条sql进行分页,如果有多个分页请分多次使用
return PageQuery.of(() -> baseMapper.queryList(query));
}
也支持手动分页
java
@Override
public TableDataInfo<SysAppVo> queryPageList(SysAppQuery query) {
// 注意:PageQuery 方法只会对第一条sql进行分页,如果有多个分页请分多次使用
return PageQuery.of(1, 10).execute(() -> baseMapper.queryList(query));
}
不分页,只进行排序
java
@Override
public TableDataInfo<SysAppVo> queryPageList(SysAppQuery query) {
// 注意:SortQuery 方法只会对第一条sql进行排序,如果有多个排序请分多次使用
return SortQuery.of(() -> baseMapper.queryList(query));
}
TIP
注意:使用 PageQuery
或 SortQuery
方法只会对第一条sql进行分页,如果有多个分页请分多次使用
使用Page对象分页
Controller
使用PageQuery
接收分页参数 具体参数参考PageQuery
TestDemoController.java
java
/**
* 查询测试单表列表
*/
@SaCheckPermission("demo:demo:list")
@GetMapping("/list")
public TableDataInfo<TestDemoVo> list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) {
return testDemoService.queryPageList(bo, pageQuery);
}
构建
Mybatis-Plus
分页对象
使用PageQuery#build()
方法 可快速(基于当前对象数据)构建MP
分页对象
TestDemoServiceImpl.java
java
/**
* 自定义分页查询
*/
@Override
public TableDataInfo<TestDemoVo> customPageList(TestDemoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TestDemo> lqw = buildQueryWrapper(bo);
Page<TestDemoVo> result = baseMapper.customPageList(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
PageQuery.java
java
// PageQuery.build()
public <T> Page<T> build() {
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize, isSearchCount);
if (sortQuery != null) {
List<OrderItem> orderItems = sortQuery.build();
if (CollUtil.isNotEmpty(orderItems)) {
page.addOrder(orderItems);
}
}
return page;
}
具体用法与 MP
一致
自定义
SQL
方法分页
只需在Mapper
方法第一个参数和返回值 重点: 第一个参数 标注分页对象
TestDemoMapper.java
java
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
Page<TestDemoVo> customPageList(@Param("page") Page<TestDemo> page, @Param("ew") Wrapper<TestDemo> wrapper);
TestDemoMapper.xml
xml
<select id="customPageList" resultType="org.dromara.demo.domain.vo.TestDemoVo">
SELECT * FROM test_demo ${ew.customSqlSegment}
</select>