若依框架---PageHelper分页(三)

简介: 若依框架---PageHelper分页(三)

在上一篇文章“若依系统分页工具学习-PageHelper篇二”中,我们阐述了PageHelper使用ThreadLocal来将分页参数保存在当前线程中。那么我们为什么却找不到若依项目中后续添加拦截器的代码呢?


PageHelper-Spring-Boot-Starter


若依是基于SpringBoot的。而PageHelper有一个spring-boot版本PageHelper-Spring-Boot-Starter

我们下载其源码来看看。


该项目中最重要的一个类是PageHelperAutoConfiguration,其部分源代码如下所示:

/**
 * 自定注入分页插件
 *
 * @author liuzh
 */
@Configuration
@ConditionalOnBean(SqlSessionFactory.class)
@EnableConfigurationProperties(PageHelperProperties.class)
@AutoConfigureAfter(MybatisAutoConfiguration.class)
@Lazy(false)
public class PageHelperAutoConfiguration implements InitializingBean {
    // 其他代码
}


如此便通过注解便将该拦截器PageInterceptor注入到项目中。PageInterceptor的部分代码如下:

public class PageInterceptor implements org.apache.ibatis.plugin.Interceptor {
    // 类内的其他代码...
}


该插件实现了接口 org.apache.ibatis.plugin.Interceptor,这个接口又是干嘛的呢?


Mybatis拦截器接口


PageHelper中的拦截器 PageInterceptor 实现了接口org.apache.ibatis.plugin.Interceptor,后者实际为Mybatis的拦截器接口。


实现了该接口的拦截器可以拦截Mybatis执行请求,修改Mybatis的默认行为,例如重写Sql。


哇,这不就是我们一直在找的逻辑吗?


我们来以PageInterceptor为例看看Mybatis的拦截器接口一般情况下式如何实现:

/**
 * Mybatis - 通用分页拦截器
 * <p>
 * GitHub: https://github.com/pagehelper/Mybatis-PageHelper
 * <p>
 * Gitee : https://gitee.com/free/Mybatis_PageHelper
 *
 * @author liuzh/abel533/isea533
 * @version 5.0.0
 */
@SuppressWarnings({"rawtypes", "unchecked"})
@Intercepts(
    {
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}),
    }
)
public class PageInterceptor implements Interceptor {
     @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 拦截器逻辑代码...
    }
}


有一个很有意思的注解:@Intercepts


通过搜索资料,我们知道了该注解中的 type可取值为:Executor.class,StatementHandler.class,PameterHandler.class, ResultSetHandler.class。


这里我们暂时不展开讲述接口的实现,大家可以对其实现,尤其是这一个注解,保留一个基础的印象。


现在,我们捋一下,就是PageHelper插件中的PageInterceptor通过实现接口org.apache.ibatis.plugin.Interceptor,从而达到了重新SQL的目的。


返回去,我们再去查看拦截器中是如何具体实现重新SQL达到分页目的的。


目录
相关文章
|
SQL Oracle 关系型数据库
若依框架---PageHelper分页(七)
若依框架---PageHelper分页(七)
370 0
|
SQL Java 数据库连接
若依框架---PageHelper分页(四)
若依框架---PageHelper分页(四)
359 0
|
SQL Java 关系型数据库
若依框架---PageHelper分页(十一)
若依框架---PageHelper分页(十一)
534 0
|
SQL 数据库
若依框架---PageHelper分页(六)
若依框架---PageHelper分页(六)
386 0
|
3月前
|
JavaScript 安全 前端开发
Vue2 和 Vue3 中 Vue Router 用法与原理详解
本文深入解析 Vue Router 在 Vue2(v3)与 Vue3(v4)中的核心用法与原理,涵盖安装配置、声明式与编程式导航、路由守卫、懒加载、动态路由及性能优化。对比版本差异,揭示其基于响应式系统实现的路由匹配与视图更新机制,助力开发者构建高效、可维护的单页应用。
356 2
|
SQL Oracle 关系型数据库
若依框架---PageHelper分页(五)
若依框架---PageHelper分页(五)
519 0
|
SQL JSON 前端开发
若依RuoYi脚手架二次开发教程(二次开发必学技能)
本次我们将通过一个菜品管理模块开发的案例,来演示拿到若依框架后,如何在若依管理系统上进行二次开发,升级改造为自己的管理系统。适合以若依作为项目脚手架的公司开发人员、毕业设计的学生及开源项目学习者。
7952 1
若依RuoYi脚手架二次开发教程(二次开发必学技能)
|
SQL Java 数据库连接
Mybatis拦截器实现公共字段填充
通过使用MyBatis拦截器,可以实现对公共字段的自动填充,简化代码,提高开发效率。拦截器通过拦截SQL操作,在插入和更新操作时自动填充公共字段,使得开发者不再需要手动设置这些字段。本文详细介绍了实现步骤,并通过示例代码展示了具体实现方法,希望能为您的开发工作提供实用的指导和帮助。
806 13
|
SQL XML Java
ruoyi若依框架@DataScope注解使用以及碰到的一些问题
ruoyi若依框架@DataScope注解使用以及碰到的一些问题
5361 0
|
SQL 安全 Java
若依框架---PageHelper分页(二)
若依框架---PageHelper分页(二)
482 0