原有分页查询需要执行两条查询语句
SELECT * FROM video LIMIT 0,3
SELECT COUNT(*) FROM video
使用注解的方式完成PageHelper插件分页
dao层 就写一个最简单的查询语句就OK
/**
* 查询全部视频列表
* @return
*/
@Select("SELECT * FROM video")
List<Video> listVideo();
Step1:引入依赖
<!-- 分页插件依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
Step2:引入配置类
/**
* MyBatis分页插件配置
*/
@Configuration
public class MyBatisConfig {
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
//设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
p.setProperty("offsetAsPageNum","true");
//设置为true时,使用RowBounds分页会进行count查询
p.setProperty("rowBoundsWithCount","true");
p.setProperty("reasonable","true");
pageHelper.setProperties(p);
return pageHelper;
}
}
Step3:控制层
/**
* 分页查询视频列表
* @param page 当前第几页 默认第一页
* @param size 每页显示数量 默认10条
* @return
*/
@GetMapping("pageVideo")
public Dto pageVideo(@RequestParam(value = "page",defaultValue = "1")int page,
@RequestParam(value = "size",defaultValue = "10")int size){
PageHelper.startPage(page, size);
//此处就是一个简单的查询全部语句
List<Video> videoList = videoService.listVideo();
//放入构造函数中
PageInfo<Video> pageInfo = new PageInfo<>(videoList);
return DtoUtil.returnDataSuccess(pageInfo);
}
参数讲解
可以顶一个HashMap再封装一层,因为有很多参数前端是用不到的
PageHelper分页基本原理
sqlsessionFactory -> sqlSession-> executor(执行器,拼装sql) -> mybatis sql statement
通过mybatis plugin 增加拦截器,然后拼装分页 覆盖原先生成的sql
通过ThreadLocal获取用户变量
org.apache.ibatis.plugin.Interceptor