PageHelper的使用和原理

发布时间 2023-05-30 10:39:55作者: 勇敢-的心

一、使用说明:

public PageInfo<MonitoringRecordDTO> monitorRecordPage(MonitoringRecordVO vo) {
PageHelper.startPage(vo.getPage(), vo.getRows());
List<MonitoringRecordDTO> recordDTOList = realTimeMapper.selectMonitorRecordList(vo);
return new PageInfo<>(recordDTOList);
}

二、原理说明:

  PageHelper是MyBatis中的一个插件,其内部实现了一个PageInterceptor的拦截器。Mybatis启动后会加载这个拦截器到拦截器链中。

在我们使用PageHelper的过程中,首先、会先使用PageHelper.startPage这样的语句在当前线程上下文中设置一个ThreadLocal变量;然后,会再利用PageInterceptor这个分页拦截器拦截,从ThreadLocal中拿到分页的信息,判断如果有分页信息就去拼装分页的SQL语句(limit等语句)进行分页查询;最后,会最终把在ThreadLocal变量中的东西清除掉。

 

三,注意事项

PageHelper使用ThreadLocal本地线程变量保存了分页参数信息,分页参数和本地线程是绑定的。我们要保证PageHelper调用startPage调用后紧跟 MyBatis 查询方法,这是安全的。

因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。