一、使用说明:
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 存储的对象。
标签:拦截器,分页,PageHelper,ThreadLocal,startPage,使用,原理,vo From: https://www.cnblogs.com/heyi-77/p/17442584.html