MyBatis-Plus 内置分页、PageHelper 自定义分页

MyBatis-Plus 内置分页、PageHelper 自定义分页
一、方式 1MyBatis-Plus 自带分页1. 必须配置分页拦截器否则 total0java运行Configuration public class MyBatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }2. 使用示例Service 层java运行// pageNum 当前页pageSize 每页条数 PageOrderInfo page new Page(1, 10); LambdaQueryWrapperOrderInfo wrapper new LambdaQueryWrapper(); wrapper.eq(OrderInfo::getIsDelete, 0).orderByDesc(OrderInfo::getCreateTime); // 执行分页查询 PageOrderInfo pageResult orderService.page(page, wrapper); // 分页结果取值 ListOrderInfo records pageResult.getRecords(); // 当前页数据 long total pageResult.getTotal(); // 总条数 long pages pageResult.getPages(); // 总页数3. XML 自定义多表分页Mapper 接口第一个参数必须传 Page 对象无需手写 limitjava运行PageOrderVO selectOrderPage(PageOrderVO page, Param(name) String name);xmlselect idselectOrderPage resultTypecom.vo.OrderVO SELECT o.*,p.product_name FROM order_info o LEFT JOIN product p ON o.product_id p.id where if testname ! nullp.product_name like concat(%,#{name},%)/if o.is_delete 0 /where /select二、方式 2PageHelper 自定义分页独立分页插件原生 MyBatis 专用1. Maven 引入依赖xml!-- SpringBoot3适配 -- dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper-spring-boot-starter/artifactId version1.4.7/version /dependency2. yml 简单配置yamlpagehelper: helperDialect: mysql reasonable: true # 页码小于1查第一页超过总页数查最后一页 pageSizeZero: false3. 核心使用语法两行代码关键点PageHelper.startPage(pageNum,pageSize)必须紧跟查询 Mapper 方法中间不能有其他 SQL 查询java运行// 1. 设置分页参数自动拦截下一条SQL拼接limit PageHelper.startPage(1,10); // 2. 执行普通全量查询无需写分页逻辑 ListOrderInfo list orderMapper.selectAllOrder(); // 3. 封装分页结果 PageInfoOrderInfo pageInfo new PageInfo(list); // 分页参数获取 ListOrderInfo data pageInfo.getList(); long total pageInfo.getTotal(); int pages pageInfo.getPages();4. Mapper XML 就是普通查询不需要处理分页xmlselect idselectAllOrder resultTypeOrderInfo select * from order_info where is_delete 0 /select5. 安全注意startPage仅对紧随其后第一条 select 生效中间如果执行其他查询会导致分页错乱 禁止循环内使用 PageHelper容易分页污染。两种分页核心对比表格对比项MyBatis-Plus 分页PageHelper 分页依赖关系MP 内置无需额外包独立第三方插件额外引入使用方式方法第一个参数传入 Page 对象查询前调用PageHelper.startPage()静态方法多表自定义 SQL支持自动拼接 limit完全兼容原生 XML无需改造 SQLLambda 条件支持 LambdaQueryWrapper无硬编码字段仅原生 MyBatis无 Lambda分页参数传递方法入参传递代码直观基于线程 ThreadLocal 存储分页参数隐式生效主流场景SpringBootMyBatis-Plus 项目你的项目纯原生 MyBatis 无 MP 的老项目补充 Controller 标准返回封装示例MP 分页返回java运行GetMapping(/order/page) public ResultPageOrderInfo page( RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize ){ PageOrderInfo page new Page(pageNum, pageSize); LambdaQueryWrapperOrderInfo wrapper new LambdaQueryWrapper(); PageOrderInfo res orderService.page(page,wrapper); return Result.success(res); }PageHelper 分页返回java运行GetMapping(/order/page) public ResultPageInfoOrderInfo page( RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize ){ PageHelper.startPage(pageNum,pageSize); ListOrderInfo list orderMapper.selectAllOrder(); PageInfoOrderInfo pageInfo new PageInfo(list); return Result.success(pageInfo); }