一.拦截器代码如下:
@Intercepts(
@Signature(method = "query",
type = Executor.class,
args = {MappedStatement.class, Object.class,
RowBounds.class, ResultHandler.class}
)
)
public class MyInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
System.out.println("被拦截方法执行之前,做的辅助服务······");
//被代理对象
Object target = invocation.getTarget();
//代理方法
Method method = invocation.getMethod();
//方法的参数
Object[] args = invocation.getArgs();
MappedStatement mappedStatement = (MappedStatement) args[0];
Object parameter = null;
if (invocation.getArgs().length > 1) {
parameter = invocation.getArgs()[1];
}
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
//执行的sql
String sql = boundSql.getSql();
return invocation.proceed();
}
}
@Signature(method = "query",type = Executor.class, args = {MappedStatement.class, Object.class,owBounds.class, ResultHandler.class} 的type指拦截器类型,
拦截器类型(注解type字段)有四种:
Executor:org.apache.ibatis.executor包下的Exceutor接口,其中的注解method字段与注解args字段对应接口中相应的与方法
ParameterHandler: org.apache.ibatis.executor.parameter
StatementHandler:org.apache.ibatis.executor.statement
ResultSetHandler: org.apache.ibatis.executor.resultset
二. springboot项目配置拦截器
@Configuration
public class MyBatisConfig {
@Bean
public String myInterceptor(SqlSessionFactory sqlSessionFactory) {
//实例化
MyInterceptor sqlInterceptor = new MyInterceptor();
sqlSessionFactory.getConfiguration().addInterceptor(sqlInterceptor);
return "myInterceptor";
}
}