在 MyBatis 中,有两种主要的分页方式:逻辑分页和物理分页。
-
逻辑分页(Logical Pagination):
- 使用 MyBatis 自带的
RowBounds进行分页。 - 这种方式是在一次性查询很多数据,然后在内存中进行分页处理,即先将所有数据查询出来,然后再根据分页参数在内存中进行截取,返回分页后的结果集。
- 由于是在内存中进行的分页,适用于数据量不大的情况。
示例:
List<User> getUsersByPage(SqlSession sqlSession, int offset, int limit) { RowBounds rowBounds = new RowBounds(offset, limit); return sqlSession.selectList("getUserList", null, rowBounds); } - 使用 MyBatis 自带的
-
物理分页(Physical Pagination):
- 自己手写 SQL 进行分页或使用分页插件(如 MyBatis 的 PageHelper)。
- 这种方式是在数据库层面进行分页,只查询出分页所需的数据,避免一次性查询全部数据,适用于大数据量的情况。
使用 PageHelper 插件的示例:
// 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<User> userList = userMapper.getUserList(); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList);在自己手写 SQL 进行分页时,可以使用
LIMIT和OFFSET进行分页,具体语法取决于数据库的类型。例如,MySQL 中的分页语法:SELECT * FROM user_table LIMIT offset, limit;
总体而言,逻辑分页适用于小数据量的情况,而物理分页更适合处理大量数据的分页查询。选择合适的分页方式取决于具体的业务需求和数据规模。