spring boot分页需按数据访问方式选择方案:jpa需继承jparepository、方法含pageable参数、pagerequest.of(pageindex从0起);pagehelper需startpage()拦截+pageinfo封装;mybatis-plus需注册paginationinnerinterceptor插件,page页码从1起。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Spring Boot项目中实现分页查询功能,必须明确区分底层数据访问方式——JPA、MyBatis、PageHelper或MyBatis-Plus各自有不可替代的配置路径和调用逻辑,选错方案会导致编译失败或分页失效。
使用Spring Data JPA原生分页
适用于已引入spring-boot-starter-data-jpa且数据库实体结构稳定、无需复杂SQL定制的场景。
第一步:确保Repository接口继承JpaRepository<entity id></entity>,例如UserRepository extends JpaRepository<user long></user>。
第二步:在Repository中声明带Pageable参数的方法,如Page<user> findByEmailContaining(String email, Pageable pageable)</user>;方法名必须遵循JPA命名规范,否则无法解析为分页查询。
第三步:Service层构造Pageable对象,推荐使用PageRequest.of(pageIndex, pageSize, Sort.by("id").descending());注意pageIndex从0开始计数,传入1代表第二页,【传错起始页码会导致数据偏移或空结果】。
第四步:Controller接收@RequestParam(defaultValue = "0") int page和@RequestParam(defaultValue = "10") int size,直接封装为Pageable并调用Service方法返回Page<user></user>对象。
通过PageHelper插件实现MyBatis分页
这是对已有MyBatis项目侵入最小、适配最灵活的方案,尤其适合需手写动态SQL的业务。
方法一:添加Maven依赖
<dependency><groupid>com.github.pagehelper</groupid><artifactid>pagehelper-spring-boot-starter</artifactid><version>1.4.6</version></dependency>
方法二:Mapper接口保持原样,无需修改签名;在Service方法内,【必须在执行查询前第一行调用PageHelper.startPage(page, size)】,之后紧跟的Mapper查询(如userMapper.selectAll())将自动被拦截并注入LIMIT语句。
方法三:获取分页结果时,不能直接返回List,而应立即调用PageInfo<user> pageInfo = new PageInfo(userList)</user>封装,其中pageInfo.getTotal()和pageInfo.getList()才是前端所需字段。
MyBatis-Plus内置分页支持
如果你已在项目中使用MyBatis-Plus,这是最简洁的方案——无需额外依赖,但必须完成插件注册。
① 创建配置类,添加@Configuration注解,并定义MybatisPlusInterceptor Bean:
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }
② 查询时构造Page<user></user>对象,例如new Page(1, 10)表示第1页、每页10条;注意此处页码从1开始,与JPA不同。
③ 调用Mapper的selectPage(page, wrapper)方法,返回值为IPage<user></user>,可直接获取getRecords()、getTotal()、getPages()等属性。
这一步操作起来很简单,直接把Page对象传进去就行,但漏掉配置类中的PaginationInnerInterceptor注册,整个分页功能将完全失效,SQL不会被重写。











