一、引入
通过Mybatis框架写SQL语句也是可以实现分页查询的。但是很繁琐,可以用Mybatis框架的一个插件PageHelper来实现分页查询。
在使用 MyBatis 时,PageHelper
是一个非常方便的分页插件,它可以帮助我们在执行查询时自动处理分页逻辑。官网:https://pagehelper.github.io/
二、使用
1.插件实现流程
1.先获取到要执行的SQL语句:select * from db
2.把SQL语句中的字段列表,变为:count(*)
3.执行SQL语句:select count(*) from emp //获取到总记录数
4.再对要执行的SQL语句:select * from emp 进行改造,在末尾添加 limit ? , ?
5.执行改造后的SQL语句:select * from emp limit ? , ?
2.引入依赖
1 2 3 4 5
| <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
|
3.配置 PageHelper
在 application.yml
或 application.properties
中配置 PageHelper
(这一步通常不是必须的,除非你需要进行一些定制化设置)。
1 2 3 4 5
| pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countSql
|
4.代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo;
@Service public class UserService {
@Autowired private UserMapper userMapper;
public PageInfo<User> getUsers(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> users = userMapper.selectAllUsers(); return users; } }
|
使用Page 或 PageInfo
接收数据
1 2 3 4 5
| Page<User> users = userMapper.selectAllUsers();
List<User> users = userMapper.selectAllUsers(); PageInfo<User> users = new PageInfo(users);
|
区别
1 2 3 4 5 6 7 8 9
| private int pageNum; private int pageSize; private int startRow; private int endRow; private long total; private int pages; private Boolean reasonable; private Boolean pageSizeZero;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private int pageNum; private int pageSize; private int size; private int startRow; private int endRow; private long total; private int pages; private List<T> list; private int firstPage; private int prePage; private int nextPage; private int lastPage; private boolean isFirstPage; private boolean isLastPage; private boolean hasPreviousPage; private boolean hasNextPage; private int navigatePages; private int[] navigatepageNums;
|
针对不同的场景使用不同的对象来接收数据。