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 阅读(622) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号