分页查询完整链路
Forge 分页查询从前端到后端完整链路:前端传 pageNum + pageSize → Controller 接收 → Service 调用 MyBatis-Plus Page → 返回 PageResult。
请求参数
前端传递分页参数:
javascript
// AiCrudPage 自动传递
// 手动调用
request.get('/biz/order/page', {
params: { pageNum: 1, pageSize: 10, orderNo: 'ORD001' }
})| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pageNum | Integer | 1 | 当前页码 |
pageSize | Integer | 10 | 每页条数 |
Controller
java
@GetMapping("/page")
@SaCheckPermission("biz:order:list")
public RespInfo page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
OrderQueryDTO query
) {
return RespInfo.success(orderService.page(query, pageNum, pageSize));
}Service
java
@Override
public PageResult<OrderVO> page(OrderQueryDTO query, Integer pageNum, Integer pageSize) {
Page<OrderEntity> page = new Page<>(pageNum, pageSize);
List<OrderVO> list = orderMapper.selectOrderPage(page, query);
return PageResult.of(list, page.getTotal());
}Mapper
java
List<OrderVO> selectOrderPage(
@Param("page") Page<OrderEntity> page,
@Param("query") OrderQueryDTO query
);Mapper XML
xml
<select id="selectOrderPage" resultMap="OrderVOMap">
SELECT
o.id, o.order_no, o.amount, o.status, o.create_time,
d.dict_label AS status_label
FROM biz_order o
LEFT JOIN sys_dict_data d
ON d.dict_type = 'biz_order_status'
AND d.dict_value = o.status
AND d.del_flag = 0
WHERE o.del_flag = 0
<if test="query.orderNo != null and query.orderNo != ''">
AND o.order_no LIKE CONCAT('%', #{query.orderNo}, '%')
</if>
<if test="query.status != null and query.status != ''">
AND o.status = #{query.status}
</if>
ORDER BY o.create_time DESC
</select>MyBatis-Plus 分页插件自动追加 LIMIT,不需要在 XML 中手写。
响应格式
json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 100,
"list": [
{
"id": 1,
"orderNo": "ORD001",
"amount": 10000,
"status": "0",
"statusLabel": "待支付",
"createTime": "2024-01-01 12:00:00"
}
]
}
}| 字段 | 类型 | 说明 |
|---|---|---|
total | Long | 总记录数 |
list | Array | 当前页数据列表 |
PageQuery 基类
分页查询 DTO 继承 PageQuery:
java
@Data
@EqualsAndHashCode(callSuper = true)
public class OrderQueryDTO extends PageQuery {
private String orderNo;
private String status;
}PageQuery 包含 pageNum 和 pageSize 字段。
分页插件配置
MyBatis-Plus 分页插件在 forge-starter-orm 中已配置:
java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// 租户拦截
interceptor.addInnerInterceptor(tenantLineInnerInterceptor());
// 数据权限
interceptor.addInnerInterceptor(dataScopeInterceptor());
return interceptor;
}注意事项
- 参数名必须用
pageNum,不能用page - XML 中不需要写
LIMIT,分页插件自动处理 - 查询必须包含
del_flag = 0条件 - 租户拦截器自动追加
tenant_id条件,不需要手动写
