在 Java + MyBatis 中,分页查询常见有 三种方式:
LIMIT(原生 SQL 分页,最常用)List<User> selectByPage(
@Param("offset") int offset,
@Param("pageSize") int pageSize
);
<select id="selectByPage" resultType="User">
SELECT *
FROM user
ORDER BY id
LIMIT #{offset}, #{pageSize}
</select>
int pageNum = 1; // 第几页
int pageSize = 10; // 每页大小
int offset = (pageNum - 1) * pageSize;
List<User> list = userMapper.selectByPage(offset, pageSize);
✅ 优点:简单、性能好
❌ 缺点:需自己写 count 查询
PageHelper 插件(最推荐)<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
@Bean
public PageInterceptor pageInterceptor() {
return new PageInterceptor();
}
或 mybatis-config.xml:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>
PageHelper.startPage(1, 10); // 第1页,每页10条
List<User> list = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(list);
pageInfo.getList(); // 数据
pageInfo.getTotal(); // 总条数
pageInfo.getPages(); // 总页数
pageInfo.getPageNum(); // 当前页
✅ 优点:自动分页 + count
✅ 支持 MySQL / Oracle / PostgreSQL
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
Page<User> page = new Page<>(1, 10);
Page<User> result = userMapper.selectPage(page, null);
result.getRecords(); // 数据
result.getTotal(); // 总数
| 方式 | 复杂度 | 是否自动 count | 推荐场景 |
|---|---|---|---|
| LIMIT | 低 | 否 | 简单项目 |
| PageHelper | 中 | 是 | 传统 MyBatis |
| MyBatis-Plus | 低 | 是 | 使用 MP |
如果你用的是 Spring Boot / XML / 注解 / Oracle,可以告诉我,我可以给你对应完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。