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个记录。也就是第二页。

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值