mybatis拦截器如何只拦截特定的mapper
时间: 2023-08-04 12:02:15 浏览: 168
用aspectj拦截mybatis mapper的一种可行方案
要在 MyBatis 拦截器中只拦截特定的 Mapper,你可以通过在拦截器的 `intercept` 方法中判断当前执行的 SQL 是否属于目标 Mapper 来实现。
首先,在自定义的拦截器类中,你可以添加一个成员变量用于存储目标 Mapper 的名称。
```java
public class DesensitizationInterceptor implements Interceptor {
private String targetMapper;
public void setTargetMapper(String targetMapper) {
this.targetMapper = targetMapper;
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 获取当前执行的 Mapper 方法的名称
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
String mapperName = mappedStatement.getId();
// 判断当前 Mapper 是否为目标 Mapper
if (mapperName.equals(targetMapper)) {
// 执行拦截逻辑
Object result = invocation.proceed();
// ...
return result;
} else {
// 不需要拦截,直接执行原逻辑
return invocation.proceed();
}
}
// 其他方法的实现...
}
```
然后,在 MyBatis 配置文件中配置该拦截器时,调用 `setTargetMapper` 方法设置目标 Mapper 的名称。
```xml
<plugins>
<plugin interceptor="com.example.DesensitizationInterceptor">
<property name="targetMapper" value="com.example.YourMapperClass.yourMethod"/>
</plugin>
</plugins>
```
通过以上步骤,拦截器只会对指定的 Mapper 方法进行拦截处理,其他 Mapper 方法将不受影响。你需要将 `com.example.YourMapperClass.yourMethod` 替换为实际目标 Mapper 方法的完整名称。
请注意,这种方式是通过判断 Mapper 方法的名称是否匹配来确定是否拦截,因此要确保提供的目标 Mapper 方法名称是准确且唯一的,以避免对其他不相关的 Mapper 进行误拦截。
阅读全文