在MyBatis中注册拦截器可以通过以下三种方式:
1. XML配置文件方式
在Mybatis的核心配置文件(mybatis-config.xml
)中的标签下定义拦截器,并指定实现类。
<configuration><!-- ...其他配置... --><plugins><plugin interceptor="com.example.MyInterceptor"><!-- 可以设置属性 --><property name="propertyName" value="propertyValue"/></plugin></plugins>
</configuration>
2. Spring Boot自动配置方式
如果你的应用使用了Spring Boot和Mybatis-Spring-boot-starter,可以在Spring Bean配置类中通过@Configuration
和@Bean
注解来注册拦截器。
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisConfig {@Beanpublic ConfigurationCustomizer mybatisConfigurationCustomizer() {return configuration -> {// 创建并添加拦截器实例到配置中configuration.addInterceptor(new MyInterceptor());};}
}
3. 注解式注册(适用于Spring环境)
如果你希望在Spring环境下更灵活地控制拦截器的作用范围,也可以利用@Intercepts和@Component注解来注册拦截器。
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;@Component
@Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),// 其他要拦截的方法...
})
public class MyInterceptor implements Interceptor {// 实现Interceptor接口方法@Overridepublic Object intercept(Invocation invocation) throws Throwable {// 拦截逻辑...return invocation.proceed();}// 其他方法...
}