文章目录
- 每页10条记录,取第一页,返回的是前10条记录
- 每页10条记录,取第二页,返回的是第11条记录,到第20条记录,
- MySQL对分页的支持
简单来说MySQL对分页的支持是通过limit子句。请看下面的例子。
limit关键字的用法是 LIMIT [offset,] rows offset是相对于首行的偏移量(首行是0),rows是返回条数。
每页10条记录,取第一页,返回的是前10条记录
select * from tableA limit 0,10;
每页10条记录,取第二页,返回的是第11条记录,到第20条记录,
select * from tableA limit 10,10;
这里提一嘴的是,MySQL在处理分页的时候是这样的:
limit 1000,10 - 过滤出1010条数据,然后丢弃前1000条,保留10条。当偏移量大的时候,性能会有所下降。
limit 100000,10 - 会过滤10w+10条数据,然后丢弃前10w条。如果在分页中发现了性能问题,可以根据这个思路调优。
- mybatis的工作原理图
先介绍一下mybatis中的插件是如何工作的,主要作用在哪个环节。mybatis的工作原理图:
从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。那么mybatis的插件作用在哪一环节呢?插件主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理。
搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。 - 引入PageHelper
pom.xml加入:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
4、在执行sql前添加插件,完成分页功能
在查询的sql语句执行之前,添加一行代码PageHelper.startPage(1, 10);第一个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数。
PageHelper.startPage(page, rows) 相当于是将limit封装了一层,用着更加简单。后续写mapper.xml的sql语句就不需要写limit 了
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();