mybatis 拦截器如何通过Invocation获取没有占位符的sql
时间: 2024-05-07 07:17:23 浏览: 96
通过Mybatis拦截器自动定位慢SQL并记录日志
拦截器可以通过Invocation对象的getArgs()方法获取方法参数,从而获取未经占位符处理的SQL语句。例如:
```
public Object intercept(Invocation invocation) throws Throwable {
// 获取方法参数
Object[] args = invocation.getArgs();
// 遍历参数查找未经占位符处理的SQL语句
for (Object arg : args) {
if (arg instanceof StatementHandler) {
StatementHandler statementHandler = (StatementHandler) arg;
BoundSql boundSql = statementHandler.getBoundSql();
String sql = boundSql.getSql();
// TODO: 处理未经占位符处理的SQL语句
break;
}
}
// 继续执行方法
return invocation.proceed();
}
```
在上面的代码中,我们先通过Invocation对象的getArgs()方法获取方法参数数组,然后遍历参数数组,找到类型为StatementHandler的参数。通过StatementHandler对象获取BoundSql对象,从而获取未经占位符处理的SQL语句。最后可以在拦截器中对SQL语句进行处理,或者将处理后的SQL语句设置回BoundSql对象中。
阅读全文