Mybatis的PageHelper原理
1.PageHelper原理
PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句,
最终实现分页查询功能。
在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中PageHelper在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修改当前执行的sql语句,添加分页sql。最后执行添加了分页sql的sql语句,实现分页查询。
2.PageHelper的实战
# springboot项目
1.首先在pom文件里添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper‐spring‐boot‐starter</artifactId>
<version>1.2.4</version>
</dependency>
2.在application.yml里面加入配置
# 配置数据库为mysql ,因为不同数据库,有不同的方言
pagehelper:
helper‐dialect: mysql
3.在mapper接口中定义一个接口
@Mapper
public interface CourseMapper {
//pagehelper测试
Page<CourseBase> findCourseBaseList();
}
返回值类型必须是com.github.pagehelper.Page
4.写个测试类
@Test
public void testPageHelper(){
//给pageHelper设置参数,到ThreadLocal
//pageNum是第几页 ,第1页开始 pageSize每页多少个
PageHelper.startPage(2,5);
Page<CourseBase> pageResult = courseMapper.findCourseBaseList();
List<CourseBase> result = pageResult.getResult() ;//获取结果集
long total = pageResult.getTotal(); //获取总记录数
System.out.println(result);
}
PageHelper.startPage(2,5);的作用就是把这两个分页参数放到ThreadLocal里去
这是存放ThreadLocal相关的代码
ThreadLocal就是线程相关的存放变量的地方。当一个请求进来,会开启一个新的线程,一个线程有它自己的ThreadLocal,在ThreadLocal里存放的变量,整个线程可以随时获取到。
随后Mybatis的拦截器会在执行sql之前从ThreadLocal获取分页信息,如果获取到,就会在后面拼接上limit
从日志上看,有两个sql执行了,一个查询总数量。
第二个查询从第5个开始查5个记录。也就是第二页。
————————————————
版权声明:本文为CSDN博主「-Cristiano-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37457564/article/details/104337081
posted on 2022-06-08 19:48 1450811640 阅读(559) 评论(0) 编辑 收藏 举报