当前位置: 首页 > news >正文

BladeX框架分页(对MP分页的二次封装)

在BladeX框架中,分页设计是数据查询功能的核心组成部分,基于MyBatis-Plus的分页能力进行了封装与扩展,形成了一套简洁高效的分页处理机制。其设计目标是简化分页参数处理、统一分页结果格式、适配前端常见分页需求。下面从核心组件、工作流程、扩展特性三个方面详细分析:

一、核心组件与设计基础

BladeX的分页设计依赖于以下核心组件,形成完整的分页链路:

  1. MyBatis-Plus的IPage接口
    作为底层分页载体,IPage定义了分页的基础属性:

    • current:当前页码(默认从1开始)
    • size:每页条数
    • total:总记录数
    • pages:总页数
    • records:当前页数据列表
  2. Condition工具类
    框架封装的分页条件构造工具,核心方法getPage(query)负责:

    • 从查询参数(query对象)中提取分页参数(pageNum/pageSize
    • 自动创建IPage实例并设置分页参数
    • 处理排序参数(如orderBy字段,支持多字段排序)
  3. QueryDTO基类
    前端传递的查询参数通常继承自QueryDTO,内置分页相关字段:

    public class QueryDTO {private Integer pageNum = 1;   // 默认页码private Integer pageSize = 10; // 默认每页条数private String orderBy;        // 排序字段,格式如"create_time desc"// getter/setter
    }
    
  4. 分页结果封装(R)
    接口返回的统一格式,通过R.data(page)包装分页结果,前端可直接解析:

    {"code": 200,"msg": "操作成功","data": {"current": 1,"size": 10,"total": 100,"pages": 10,"records": [...]}
    }
    

二、分页工作流程

BladeX的分页处理流程可分为参数解析→条件构建→查询执行→结果返回四步,全程简化开发者的编码工作:

  1. 前端传递分页参数
    前端通过URL参数或请求体传递分页信息,例如:

    GET /api/user/page?pageNum=2&pageSize=20&orderBy=name asc
    
  2. 后端接收并解析参数
    控制器方法接收继承自QueryDTO的查询对象(如UserQuery),自动绑定分页参数:

    @GetMapping("/page")
    public R<IPage<UserVO>> page(UserQuery query) {// query中已包含pageNum、pageSize、orderBy等参数
    }
    
  3. 创建分页条件
    调用Condition.getPage(query)生成IPage实例,自动处理分页和排序:

    IPage<UserVO> page = Condition.getPage(query); 
    // 等价于手动创建:
    // IPage<UserVO> page = new Page<>(query.getPageNum(), query.getPageSize());
    // 并处理query.getOrderBy()的排序逻辑
    
  4. 执行分页查询
    Service层调用MyBatis-Plus的page方法,传入IPage和查询条件(QueryWrapper):

    @Override
    public IPage<UserVO> selectUserPage(IPage<UserVO> page, UserQuery query) {// 构建查询条件QueryWrapper<User> wrapper = Wrappers.query();if (StrUtil.isNotBlank(query.getName())) {wrapper.like("name", query.getName());}// 执行分页查询,结果会自动填充到page对象中return baseMapper.selectPage(page, wrapper);
    }
    
  5. 返回统一结果
    控制器将IPage对象通过R.data()包装后返回,前端直接使用:

    return R.data(userService.selectUserPage(page, query));
    

三、扩展特性与设计亮点

BladeX在基础分页功能上增加了多项实用特性,提升开发效率:

  1. 默认分页参数与全局配置

    • 若前端未传递pageNum/pageSize,框架默认使用110
    • 可通过配置文件全局修改默认值:
      blade:mybatis:page-size: 20  # 默认每页条数
      
  2. 排序参数自动解析
    支持通过orderBy参数指定排序规则(如orderBy=create_time desc,id asc),Condition工具类会自动将其转换为QueryWrapper的排序条件,无需手动调用orderByDesc/orderByAsc

  3. 适配前端表格组件
    分页结果格式(current/size/total/records)与主流前端UI框架(如Element UI、Ant Design)的表格组件分页参数完全兼容,前端可直接绑定数据,无需额外转换。

  4. 分页拦截器自动生效
    框架默认配置了MyBatis-Plus的MybatisPlusInterceptor,并注册了PaginationInnerInterceptor,无需开发者手动配置分页插件,启动即可使用分页功能。

  5. 支持自定义分页逻辑
    若默认分页无法满足需求(如复杂的多表联查分页),可手动创建IPage对象,结合baseMapper的自定义SQL实现分页:

    IPage<UserVO> page = new Page<>(query.getPageNum(), query.getPageSize());
    return page.setRecords(baseMapper.customPageQuery(page, query));
    

总结

BladeX的分页设计本质是对MyBatis-Plus分页能力的“二次封装”,通过Condition工具类简化参数处理,通过QueryDTOR<IPage>统一前后端交互格式,同时保留了底层分页的灵活性。这种设计既降低了分页功能的开发成本,又保证了扩展性,非常适合快速开发企业级后台系统。


文章转载自:

http://0KeQlRpZ.mpscg.cn
http://DO4xaYIA.mpscg.cn
http://2FhmlmdN.mpscg.cn
http://Y26Fz6Fe.mpscg.cn
http://HpplESU5.mpscg.cn
http://QV8pufGX.mpscg.cn
http://e4NnuE7n.mpscg.cn
http://L72Hchvj.mpscg.cn
http://uYr6ddzp.mpscg.cn
http://ULJLhtO5.mpscg.cn
http://pfNPU27b.mpscg.cn
http://rDKUcaGZ.mpscg.cn
http://dM0UuDx7.mpscg.cn
http://KdnPZGgA.mpscg.cn
http://NjS1lFtH.mpscg.cn
http://V10HgCXj.mpscg.cn
http://zJdgNLFI.mpscg.cn
http://65EAk12L.mpscg.cn
http://bTuYVYVK.mpscg.cn
http://YWFmwJJ8.mpscg.cn
http://0LWVX1ti.mpscg.cn
http://zOjSl7iS.mpscg.cn
http://O9PVLiXh.mpscg.cn
http://nqo7iLH2.mpscg.cn
http://5loKgTcQ.mpscg.cn
http://7naWMAFC.mpscg.cn
http://CS6Tln8T.mpscg.cn
http://qRnFPIg5.mpscg.cn
http://NsBntEST.mpscg.cn
http://ZwaEJtr4.mpscg.cn
http://www.dtcms.com/a/386566.html

相关文章:

  • Tomcat 性能优化与高并发调优
  • C++备战蓝桥杯9.13-9.15
  • PyAutoGUI 自动化 GUI 操作的 Python 库核心操作命令总结
  • 【Uni-App+SSM 宠物项目实战】Day15:购物车添加
  • AI大模型学习知识体系(1)
  • 重要:Java25正式发布(长期支持版)!
  • OneTerm开源堡垒机实战(二):快速部署与基本使用
  • 网络问题排查
  • linux之套接字Socket
  • 【Uni-App+SSM 宠物项目实战】Day14:商家服务列表
  • MCP 协议客户端与服务端python demo
  • 【Nginx开荒攻略】从命令到实战:Nginx服务启动、停止与重载完全指南
  • Ubuntu系统中在线安装MySQL到指定目录
  • C++工程实战入门笔记16-智能指针
  • 【深度学习新浪潮】什么是太空算力中心?
  • 容器化部署之dockercompose08
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解二)
  • [deepseek]Visual Studio 2022创建和使用DLL教程
  • k8s节点网络失联后会发生什么
  • 3分钟掌握C++/Lua双向通信:一个高性能内核 + N个动态脚本
  • Spring MVC小点
  • SpringBoot的自动配置原理
  • 动力电池组半自动生产线:效率与灵活性的平衡之道|深圳比斯特自动化
  • 前端开发编辑器有哪些?常用前端开发编辑器推荐、前端开发编辑器对比与最佳实践分析
  • 【Linux】自动化构建工具——make/Makefile
  • Playwright MCP浏览器自动化教程
  • Linux 内存管理章节十四:多核世界的交通规则:深入Linux内存屏障与并发控制
  • .NET Core 中生成 JWT(JSON Web Token)
  • webRTc 为何深受直播实现的青睐?
  • iOS App 卡顿与性能瓶颈排查实战 如何定位CPU内存GPU帧率问题、优化耗电与网络延迟(uni-app开发性能优化全流程指南)