MyBatis 的分页方式

240 阅读1分钟

在 MyBatis 中,有两种主要的分页方式:逻辑分页和物理分页。

  1. 逻辑分页(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);
    }
    
  2. 物理分页(Physical Pagination):

    • 自己手写 SQL 进行分页或使用分页插件(如 MyBatis 的 PageHelper)。
    • 这种方式是在数据库层面进行分页,只查询出分页所需的数据,避免一次性查询全部数据,适用于大数据量的情况。

    使用 PageHelper 插件的示例:

    // 设置分页参数
    PageHelper.startPage(pageNum, pageSize);
    // 执行查询
    List<User> userList = userMapper.getUserList();
    // 获取分页信息
    PageInfo<User> pageInfo = new PageInfo<>(userList);
    

    在自己手写 SQL 进行分页时,可以使用 LIMITOFFSET 进行分页,具体语法取决于数据库的类型。例如,MySQL 中的分页语法:

    SELECT * FROM user_table LIMIT offset, limit;
    

总体而言,逻辑分页适用于小数据量的情况,而物理分页更适合处理大量数据的分页查询。选择合适的分页方式取决于具体的业务需求和数据规模。