
本文记录我在二手交易平台项目中实现分页功能的完整过程从依赖到代码附踩坑。一、为什么要分页商品列表数据多了一次全查出来数据库压力大前端渲染慢用户看不完分页每次只查一页的数据按需加载。二、加依赖MyBatis Plus 3.5.9 之后分页插件被拆到了独立依赖光有 starter 不够。在 pom.xml 加!-- MyBatis Plus 分页插件依赖3.5.9 需要单独引入 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-jsqlparser/artifactIdversion3.5.16/version/dependency三、配置分页插件新建 config/MyBatisPlusConfig.javapackagecom.example.secondhand_shop.config;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;ConfigurationpublicclassMyBatisPlusConfig{BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();// 添加分页插件interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));returninterceptor;}}四、ProductMapper 加分页联查方法普通分页不会联查分类名要自定义 SQLSelect(SELECT p.*, c.name AS categoryName FROM product p LEFT JOIN category c ON p.category_id c.id)IPageProductpageWithCategory(PageProductpage);注意参数是 Page返回值是 IPage。五、ProductService 加分页方法publicPageProductpageProduct(IntegerpageNum,IntegerpageSize){PageProductpagenewPage(pageNum,pageSize);return(PageProduct)getBaseMapper().pageWithCategory(page);}为什么不用 return page(page)因为 page(page) 走默认查询不会联查分类名categoryName 会是 null。六、ProductController 加分页接口GetMapping(/page)publicResponseResultPageProductpage(RequestParam(defaultValue1)IntegerpageNum,RequestParam(defaultValue5)IntegerpageSize){returnResponseResult.success(productService.pageProduct(pageNum,pageSize));}踩坑/page 要放在 /{id} 前面否则 Spring 会优先匹配 /{id}把 page 当成 id。七、踩坑汇总八、总结分页三步加依赖 mybatis-plus-jsqlparser配插件 PaginationInnerInterceptor写代码 Mapper 自定义 SQL Service 调 pageWithCategory Controller 加 /page 接口完整跑通后商品列表性能大大提升用户也能翻页了。