Mybatis 的分页查询
使用 RowBounds
RowBounds 是 Mybatis 提供的一个专门处理分页的对象。在 RowBounds 对象中有两个成员变量
- offset:偏移量,从 0 开始计数
- limit:限制条数
使用 RowBounds 进行分页,非常方便,不需要在 SQL 语句中写 limit,即可完成分页 功能。但是由于它是在 SQL 查询出所有结果的基础上截取数据的,所以在数据量大的 SQL 中并不适用,它更适合在返回数据结果较少的查询中使用
- 接口
List<Users>selectUsersRowBounds(RowBounds rowBounds);
- mapper
<!--查询所有数据使用 RowBounds 实现分页处理--><selectid="selectUsersRowBounds"resultType="users">
select * from users</select>
使用 SQL 语句分页
- 接口
List<Users>selectUsersLimit(@Param("offset")int offset,@Param("limit")int limit);
- mapper
<!--查询所有数据使用 limit 实现分页处理--><selectid="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><plugininterceptor="com.github.pagehelper.PageInterceptor"><!-- 设置数据库类型
Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库--><propertyname="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使用
publicclassPageHelperTest{publicstaticvoidmain(String[] args){SqlSession sqlSession=MybatisUtils.getSqlSession();UsersMapper usersMapper=sqlSession.getMapper(UsersMapper.class);UsersExample usersExample=newUsersExample();PageHelper.startPage(3,2);List<Users> list= usersMapper.selectByExample(usersExample);
list.forEach(System.out::println);PageInfo<Users> pageInfo=newPageInfo<>(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());}}