Mybatis学习--19.Mybatis中的分页插件
Mybatis使用PageHelper
PageHelper是他人开发出来方便mybatis进行分页操作的一个插件。
分页查询中的两个重要概念:
- pageNum:页号,表示要查询第几页的信息
- pageSize:每页可以显示的记录条数
用户发送请求时,需要将这两个信息一起发送。
在mysql中可以使用limit关键字来进行分页操作。比如select * from xxx limit 0,3;表示显示开头3条记录。limit后的第一个参数表示起始位置,第二个参数表示显示多少条记录。
通过分析我们可以得到以下关系式:
- startIndex = (pageNum - 1) * pageSize;
- 因此根据用户从前端传来的pageNum和pageSize参数,可以使用limit关键字从数据库中获取相关数据
其实获取分页相关的数据并不难(直接通过limit关键字即可),但是想要获取分页相关的信息就没那么简单,比如是否还有下一页、上一页(通过limit很难做到),因此我们需要使用pageHelper插件
PageHelper插件
使用PageHelper插件进行分页,更加方便简单
使用方法
引入pageHelper插件依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.1</version> </dependency>
1
2
3
4
5
6
7
8
2. 在mybatis核心配置文件中配置插件
* ```xml
<!-- mybatis分页拦截器-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
编写java代码
1
2
3
4
5
6
7
8
9
10public void testSelectByPage(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
//注意:在执行SQL语句(select)之前需要开启pageHelper
int startIndex = 2;
int pageSize = 2;
PageHelper.startPage(startIndex,pageSize);
List<Car> cars = mapper.selectAll();
cars.forEach(car -> System.out.println(car));
}通过PageInfo对象获取分页信息
public void testSelectByPage(){ SqlSession sqlSession = SqlSessionUtil.getSqlSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); //注意:在执行SQL语句(select)之前需要开启pageHelper int startIndex = 2; int pageSize = 2; PageHelper.startPage(startIndex,pageSize); List<Car> cars = mapper.selectAll(); // cars.forEach(car -> System.out.println(car)); PageInfo<Car> carpageInfo = new PageInfo<Car>(cars,2); System.out.println(carpageInfo); } /** 这也是我们使用PageHelper的目的 PageInfo中包含的信息 PageInfo{pageNum=2(页数), pageSize=2(页的大小), size=2, startRow=3(数据库表的起始), endRow=4(数据库表的结束), total=4(数据库表的数据大小), pages=2(总页数), list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=4, pages=2, reasonable=false, pageSizeZero=false}[法拉利, BMW], prePage=1(前一页的编号), nextPage=0(后一页的编号,当为最后一页时,后一页编号为0), isFirstPage=false(是否是第一页), isLastPage=true(是否是最后一页), hasPreviousPage=true(前面是否还有页), hasNextPage=false(后面是否还有页), navigatePages=2(导航栏中显示的页), navigateFirstPage=1, navigateLastPage=2, navigatepageNums=[1, 2]} **/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 dch'blog!