二十六、自定义Mybatis拦截器(1)

MyBatis分页插件原理与自定义拦截器

1. mybatis分页插件PageHelper实现原理

PageHelper分页的实现是在执行SQL语句之前动态的将分页的SQL拼接进去,从而实现了从数据库中分页查询。

1.1 使用方式

首先回顾一下PageHelper插件的使用方式,非常简单,分2步完成:

第一步:在mybatis的SqlMapConfig.xml配置文件中配置插件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <plugins>
        <!-- com.github.pagehelper 为 PageHelper 类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>
</configuration>

第二步:在Java代码中调用插件的API进行分页处理

//分页查询
public PageResult findPage(QueryPageBean queryPageBean) {
   
   
  Integer currentPage = queryPageBean.getCurrentPage();
  Integer pageSize = queryPageBean.getPageSize();
  String queryString = queryPageBean.getQueryString(
### 解决自定义MyBatis拦截器在Spring Boot项目中不起作用的方法 #### 1. 检查依赖引入 要保证项目里正确引入了 MyBatisMyBatis-Plus 相关依赖。若使用 MyBatis-Plus,需要添加如下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> ``` #### 2. 检查拦截器注册 要确保自定义拦截器已经正确注册到 MyBatis 配置中。可通过 Java 代码或者配置文件来注册拦截器。 Java 代码注册示例: ```java import org.apache.ibatis.plugin.Interceptor; import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisConfig { @Bean public ConfigurationCustomizer mybatisConfigurationCustomizer(Interceptor myInterceptor) { return configuration -> configuration.addInterceptor(myInterceptor); } } ``` #### 3. 检查拦截器逻辑 要保证拦截器的 `intercept` 方法实现无误,并且 `invocation.proceed()` 语句正确使用。MyBatis拦截器采用责任链设计模式,多个拦截器之间的责任链是通过动态代理组织的,`invocation.proceed()` 语句的作用是将拦截器责任链向后传递,本质上便是动态代理的 `invoke` [^2]。 #### 4. 检查拦截器顺序 若项目中存在多个拦截器拦截器的顺序也许会对其生效情况产生影响。可通过 `@Intercepts` 注解的 `@Signature` 来指定拦截的方法和顺序。 #### 5. 检查其他冲突 检查项目中是否存在和自定义拦截器冲突的组件,像 PageHelper 这类插件也许会造成自定义 MyBatis 拦截器不生效 [^2]。 ### 在若依 Spring Boot 项目中不起作用的原因 #### 1. 框架默认配置影响 若依框架也许存在默认的 MyBatis 配置,这可能会覆盖自定义拦截器的注册或者配置,从而使自定义拦截器无法生效。 #### 2. 插件冲突 若依项目可能集成了一些插件,这些插件和自定义拦截器存在冲突,就像 PageHelper 可能导致自定义 MyBatis 拦截器不生效 [^2]。 #### 3. 拦截器加载顺序问题 若依框架的启动流程可能对拦截器的加载顺序有特定要求,要是自定义拦截器的加载顺序不正确,就可能无法生效。 #### 4. 配置文件问题 若依项目也许有自己的配置文件管理机制,若自定义拦截器的配置未正确添加到相应的配置文件中,就会导致拦截器不生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值