MyBatis-Plus--PageHelper 与 MyBatis-Plus 分页插件
比较
比较维度 PageHelper MyBatis-Plus 分页插件 类型 独立的 MyBatis 分页插件 MyBatis-Plus 内置的分页插件 启动分页方式 需要在查询前显式调用 PageHelper.startPage()
传入分页对象( Page
),插件自动拦截配置复杂度 需要配置 PageInterceptor
拦截器及参数只需配置 MybatisPlusInterceptor
和PaginationInnerInterceptor
依赖关系 额外依赖 pagehelper-spring-boot-starter
依赖 MyBatis-Plus,集成度更高 统计查询 自动执行 COUNT(*)
查询自动执行 COUNT(*)
查询返回结果类型 PageInfo<T>
IPage<T>
(一般用Page<T>
实现类)SQL 改写原理 拦截器动态修改 SQL,加入 LIMIT
拦截器动态修改 SQL,加入 LIMIT
使用体验 需显式调用分页方法,容易漏调用 使用更简洁,传入分页参数即可 功能拓展 专注分页,功能较单一 除分页外,还提供代码生成、逻辑删除等多功能 适用场景 纯 MyBatis 项目,兼容性好 使用 MyBatis-Plus 项目,推荐使用
重点总结
PageHelper
作为一个独立插件,适用于任意 MyBatis 项目。
需要在每次分页查询前调用
PageHelper.startPage()
开启分页。返回
PageInfo
,包含分页结果和元数据。MyBatis-Plus 分页插件
是 MyBatis-Plus 框架内置的分页机制。
只要传入分页对象,插件自动拦截修改 SQL。
返回
IPage
接口的实现,包含分页结果和元数据。集成度高,功能丰富,使用更方便。
小贴士
如果项目用的是 MyBatis-Plus,建议使用自带的分页插件,代码更简洁且统一。
如果项目是纯 MyBatis,且不想引入 MyBatis-Plus,则使用 PageHelper 更合适。
一、PageHelper 分页示例(Spring Boot)
1. 引入依赖(pom.xml)
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version> </dependency>
2. 配置类(PageHelperConfig.java)
@Configuration public class PageHelperConfig {@Beanpublic PageInterceptor pageInterceptor() {PageInterceptor interceptor = new PageInterceptor();Properties properties = new Properties();// 设置参数,支持合理化分页properties.setProperty("helperDialect", "mysql"); // 数据库方言properties.setProperty("reasonable", "true"); // 页码<=0查询第一页,超过总页数查询最后一页properties.setProperty("supportMethodsArguments", "true"); // 支持通过方法参数传入分页参数interceptor.setProperties(properties);return interceptor;} }
3. Mapper 接口(UserMapper.java)
@Mapper public interface UserMapper {@Select("SELECT * FROM user")List<User> selectAllUsers(); }
4. Service 调用分页(UserService.java)
@Service public class UserService {@Autowiredprivate UserMapper userMapper;public PageInfo<User> getUserPage(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize); // 重点:调用分页方法List<User> users = userMapper.selectAllUsers();return new PageInfo<>(users);} }
5. Controller 示例(UserController.java)
@RestController @RequestMapping("/pagehelper") public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public PageInfo<User> getUsers(@RequestParam int page, @RequestParam int size) {return userService.getUserPage(page, size);} }
二、MyBatis-Plus 分页插件示例(Spring Boot)
1. 引入依赖(pom.xml)
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency>
2. 分页插件配置类(MybatisPlusConfig.java)
@Configuration public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 配置数据库类型,这里以 MySQL 为例interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;} }
3. Mapper 接口(UserMapper.java)
@Mapper public interface UserMapper extends BaseMapper<User> {// 继承BaseMapper即可,无需写分页方法 }
4. Service 示例(UserService.java)
@Service public class UserService {@Autowiredprivate UserMapper userMapper;public IPage<User> getUserPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);return userMapper.selectPage(page, null); // 无条件分页查询} }
5. Controller 示例(UserController.java)
@RestController @RequestMapping("/mybatisplus") public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public IPage<User> getUsers(@RequestParam int page, @RequestParam int size) {return userService.getUserPage(page, size);} }
总结
特点 PageHelper MyBatis-Plus 分页插件 启动分页方式 需要调用 PageHelper.startPage()
传入 Page
对象,自动拦截配置复杂度 需要配置分页拦截器及参数 只需配置 MybatisPlusInterceptor
返回分页对象 PageInfo<T>
IPage<T>
使用场景 纯 MyBatis 项目,老项目兼容 使用 MyBatis-Plus 项目推荐使用