Mybatis 的分页查询
使用 RowBounds
RowBounds 是 Mybatis 提供的一个专门处理分页的对象。在 RowBounds 对象中有两个成员变量
- offset:偏移量,从 0 开始计数
- limit:限制条数
使用 RowBounds 进行分页,非常方便,不需要在 SQL 语句中写 limit,即可完成分页 功能。但是由于它是在 SQL 查询出所有结果的基础上截取数据的,所以在数据量大的 SQL 中并不适用,它更适合在返回数据结果较少的查询中使用
- 接口
List<Users> selectUsersRowBounds(RowBounds rowBounds);
- mapper
<!--查询所有数据使用 RowBounds 实现分页处理-->
<select id="selectUsersRowBounds" resultType="users">
select * from users
</select>
使用 SQL 语句分页
- 接口
List<Users> selectUsersLimit(@Param("offset") int offset,@Param("limit") int limit);
- mapper
<!--查询所有数据使用 limit 实现分页处理-->
<select id="selectUsersLimit" resultType="users">
select * from users limit #{offset},#{limit}
</select>
PageHelper 分页插件
PageHelper 是一款非常好用的开源免费的 Mybatis 第三方分页插件。它基于 plugin 的方 式与 Mybatis 整合。通过 PageHelper 所提供的 API 完成对数据的分页查询
相关配置
- pom.xml
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
- 全局配置文件中
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型
Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
分页查询 API
PageHelper.startPage(int pageNum,int pageSize);
给定分页参数,该方法需要在执行查询之前调用,相关参数如下:
参数 | 含义 |
---|---|
pageNum | 起始的页数,从 1 开始计算 |
pageSize | 每页显示的条数 |
PageInfo 对象
API | 作用 |
---|---|
pageInfo.getList() | 获取分页查询结果 |
pageInfo.getTotal() | 获取查询总条数 |
pageInfo.getPages() | 获取总页数 |
pageInfo.getPageNum() | 获取当前页 |
pageInfo.getSize() | 获取每页显示的条数 |
PageHelper使用
public class PageHelperTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper =sqlSession.getMapper(UsersMapper.class);
UsersExample usersExample = new UsersExample();
PageHelper.startPage(3,2); List<Users> list = usersMapper.selectByExample(usersExample);
list.forEach(System.out::println);
PageInfo<Users> pageInfo = new PageInfo<>(list);
//获取结果集
List<Users> result = pageInfo.getList();
result.forEach(System.out::println);
//获取总条数
System.out.println("总条数:"+pageInfo.getTotal()); //获取总页数
System.out.println("总页数"+pageInfo.getPages()); //获取当前页
System.out.println("当前页"+pageInfo.getPageNum()); //获取每页显示的条数
System.out.println("每页条数"+pageInfo.getSize());
}
}