package com.cloudroam.common.interceptor;
|
|
import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
|
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
|
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.ibatis.executor.Executor;
|
import org.apache.ibatis.executor.parameter.ParameterHandler;
|
import org.apache.ibatis.executor.statement.StatementHandler;
|
import org.apache.ibatis.mapping.BoundSql;
|
import org.apache.ibatis.mapping.MappedStatement;
|
import org.apache.ibatis.session.ResultHandler;
|
import org.apache.ibatis.session.RowBounds;
|
|
import java.sql.Connection;
|
import java.sql.SQLException;
|
import java.util.Properties;
|
|
@Slf4j
|
public class SqlInterceptor extends JsqlParserSupport implements InnerInterceptor {
|
|
@Override
|
public boolean willDoQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
|
System.out.println("willDoQuery");
|
System.out.println();
|
System.out.println(ms.getBoundSql(parameter).getSql());
|
return InnerInterceptor.super.willDoQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql);
|
}
|
|
@Override
|
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
|
System.out.println("beforeQuery");
|
|
|
|
|
InnerInterceptor.super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql);
|
}
|
|
@Override
|
public boolean willDoUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
|
System.out.println("willDoUpdate");
|
return InnerInterceptor.super.willDoUpdate(executor, ms, parameter);
|
}
|
|
@Override
|
public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
|
System.out.println("beforeUpdate");
|
InnerInterceptor.super.beforeUpdate(executor, ms, parameter);
|
}
|
|
@Override
|
public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
|
System.out.println("beforePrepare");
|
System.out.println(sh.getBoundSql().getSql());
|
// 获取 BoundSql
|
BoundSql boundSql = sh.getBoundSql();
|
|
// 获取带参数的原始 SQL
|
String originalSql = boundSql.getSql();
|
|
// 获取参数处理器
|
ParameterHandler parameterHandler = sh.getParameterHandler();
|
|
// 获取参数值,这里会包含所有的参数值
|
Object parameterObject = parameterHandler.getParameterObject();
|
|
// 在这里可以将参数值与 SQL 结合起来,生成带参数值的 SQL
|
// 例如,你可以使用 MyBatis 的工具类将参数值替换到 SQL 中
|
// / 将参数值替换到 SQL 中
|
String sqlWithParameterValues = originalSql.replaceAll("\\?", parameterObject.toString());
|
|
// String sqlWithParameterValues = MyBatisUtils.resolveSqlWithParameterValues(originalSql, parameterObject);
|
|
// 在这里可以保存带参数值的原始 SQL 或进行其他自定义操作
|
System.out.println("Original SQL with Parameter Values: " + sqlWithParameterValues);
|
InnerInterceptor.super.beforePrepare(sh, connection, transactionTimeout);
|
}
|
|
@Override
|
public void setProperties(Properties properties) {
|
System.out.println("setProperties");
|
InnerInterceptor.super.setProperties(properties);
|
}
|
}
|