在 Java 中使用 MyBatis 做分页查询,常见有三种方式:
Limit(最原始、最常用)List<User> selectUserByPage(
@Param("offset") int offset,
@Param("pageSize") int pageSize
);
<select id="selectUserByPage" 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.selectUserByPage(offset, pageSize);
✅ 优点:简单、性能好
❌ 缺点:需自己写 count 查询
PageHelper(最推荐,企业常用)<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
@Configuration
public class MybatisConfig {
@Bean
public PageInterceptor pageInterceptor() {
return new PageInterceptor();
}
}
List<User> selectAllUser();
<select id="selectAllUser" resultType="User">
SELECT * FROM user
</select>
PageHelper.startPage(1, 10); // 第1页,每页10条
List<User> list = userMapper.selectAllUser();
PageInfo<User> pageInfo = new PageInfo<>(list);
pageInfo.getTotal(); // 总条数
pageInfo.getPages(); // 总页数
pageInfo.getPageNum(); // 当前页
pageInfo.getList(); // 当前页数据
✅ 优点:全自动分页、支持多数据库
✅ 企业项目最常用
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
Page<User> page = new Page<>(1, 10);
userMapper.selectPage(page, null);
List<User> list = page.getRecords();
long total = page.getTotal();
| 方式 | 推荐度 | 说明 |
|---|---|---|
| Limit | ⭐⭐ | 简单 SQL |
| PageHelper | ⭐⭐⭐⭐⭐ | 最常用 |
| MyBatis-Plus | ⭐⭐⭐⭐ | 已用 MP 时 |
如果你是 Spring Boot + MyBatis,我可以直接帮你写一套完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。