MyBatis 插件(拦截器)实战(自定义实现拦截器)
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;
import java.sql.Connection;
import java.util.Properties;
@Intercepts({
@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
})
public class MyInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 获取被拦截的对象
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
// 获取查询语句
String sql = statementHandler.getBoundSql().getSql();
// 在这里可以对sql进行任何你想要的处理
System.out.println("Original SQL: " + sql);
// 执行原始查询
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
// 为目标对象创建代理
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
// 可以接收配置文件中的属性
}
}
这段代码定义了一个简单的MyBatis拦截器,用于拦截StatementHandler的prepare方法。在拦截方法中,它打印出原始的SQL语句,并且可以对其进行修改。最后,它通过invocation.proceed()
方法执行原始的查询。这个例子展示了如何使用MyBatis提供的Interceptor接口来增加自定义的拦截逻辑。
评论已关闭