Mybatis分页插件PageHelper的分页原理剖析

 更新时间:2023年08月17日 11:03:28   作者:信仰_273993243  
这篇文章主要介绍了Mybatis分页插件PageHelper的分页原理剖析,PageHelper作为一个启动器,那么就和其他启动器加载一样,先读取spring.factories文件里面配置的类,转成Bean加载本系统中,然后执行他的前置后置处理方法,完成初始化,需要的朋友可以参考下

前言

先说下大致的流程:PageHelper作为一个启动器,那么就和其他启动器加载一样,先读取spring.factories文件里面配置的类,转成Bean加载本系统中

然后执行他的前置后置处理方法,完成初始化,最后当我们执行目标方法时,通过拦截器对目标方法进行拦截,以达到拓展的目的。

一、加载启动器里面的Bean

1、PageHelper的spring.factories

2、里面就包含一个PageHelperAutoConfiguration类这是一个配置类,看下有哪些内容

在方法org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories里面会去加载其他Jar下面的spring.factories文件,然后把文件下配置的类扫描添加到Map里面去。

3、那么spring是在哪里把jar包下面的spring.factories扫描进去的

其他starter的spring.factories加载也是如此

4、加载完之后需要把这个Bean注册到Spring容器中

因为是一个Configuration,所以基本注册成Bean都是在ConfigurationClassPostProcessor里面完成

最终会: org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#registerBeanDefinitionForImportedConfigurationClass 方法里面把PageHelperAutoConfiguration注册到Spring容器中

下面看下PageHelperAutoConfiguration有什么作用

二、实例化PageHelperAutoConfiguration

该方法在实例化Bean的时候,调用BeanPostProcessorsBefore回调方法会触发下面的方法

往sql拦截器链中添加拦截器

三、使用

先看下分页查询的代码

其中有个setLocalPage,就是利用ThreadLocal,设置变量值

public abstract class PageMethod {
    protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
    protected static boolean DEFAULT_COUNT = true;
    /**
     * 设置 Page 参数
     *
     * @param page
     */
    protected static void setLocalPage(Page page) {
        LOCAL_PAGE.set(page);
    }
}

最终在执行sql查询的时候,会触发到拦截器

看下这个拦截器做了什么?

主要是判断是否需要分页,是否需要count操作,等等,最后返回List

到此这篇关于Mybatis分页插件PageHelper的分页原理剖析的文章就介绍到这了,更多相关PageHelper的分页原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Set与List的关系与区别介绍

    Java中Set与List的关系与区别介绍

    这篇文章主要介绍了Java中Set与List的关系与区别介绍,本文总结它们两个接口都是继承自Collection、它们之间的存储方式不一样,需要的朋友可以参考下
    2015-03-03
  • spring boot如何使用POI读取Excel文件

    spring boot如何使用POI读取Excel文件

    本文主要介绍使用POI进行Excel文件的相关操作,涉及读取文件,获取sheet表格,对单元格内容进行读写操作,以及合并单元格的操作
    2021-08-08
  • Java操作MinIO实现文件的上传和删除

    Java操作MinIO实现文件的上传和删除

    本文主要介绍如何将本地Java项目resources目录下的一个PNG图片上传到MinIO,然后将上传的图片删除,文中有详细的流程步骤和示例代码,需要的朋友可以参考下
    2023-06-06
  • Mybatis中传递多个参数的4种方法总结

    Mybatis中传递多个参数的4种方法总结

    这篇文章主要给大家介绍了关于Mybatis中传递多个参数的4种方法,并且介绍了关于使用Mapper接口时参数传递方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-04-04
  • Java 文件上传与路径处理之Paths.get()、resolve()、transferTo()的用法详解

    Java 文件上传与路径处理之Paths.get()、resolve()、transferTo()的用法详解

    本文详细解析了如何使用Java的Paths.get()、resolve()和Spring的transferTo()方法处理文件上传功能,并给出了完整的代码示例,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • Spring如何重写内置Bean(Controller、Service等)

    Spring如何重写内置Bean(Controller、Service等)

    本文介绍了在Spring Boot工程中处理外部JAR包中Controller方法重写的需求,通过PostProcessor方式和自定义注解@ExcludeBean两种方法,解决了在不修改源代码的情况下重写接口的问题
    2025-01-01
  • 使用spring+maven不同环境读取配置方式

    使用spring+maven不同环境读取配置方式

    这篇文章主要介绍了使用spring+maven不同环境读取配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 解决打开的idea项目maven不生效问题

    解决打开的idea项目maven不生效问题

    这篇文章主要给大家介绍了关于如何解决打开的idea项目maven不生效问题,最近在配置maven时,发现无论配置几遍,IDEA中的maven配置总会还原成默认的,所以这里给大家分享下解决办法,需要的朋友可以参考下
    2023-07-07
  • 解析Java格式字符串的使用

    解析Java格式字符串的使用

    本文通过实例给大家介绍了java格式字符串的使用,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-02-02
  • k8s部署springboot实现前后端分离项目

    k8s部署springboot实现前后端分离项目

    本文主要介绍了k8s部署springboot实现前后端分离项目,主要包括配置文件、镜像构建和容器编排等方面,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论