package com.dy.common.mybatis;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.ibatis.executor.Executor;
|
import org.apache.ibatis.mapping.BoundSql;
|
import org.apache.ibatis.mapping.MappedStatement;
|
import org.apache.ibatis.plugin.Interceptor;
|
import org.apache.ibatis.plugin.Intercepts;
|
import org.apache.ibatis.plugin.Invocation;
|
import org.apache.ibatis.plugin.Signature;
|
import org.apache.ibatis.session.Configuration;
|
import org.apache.ibatis.session.ResultHandler;
|
import org.apache.ibatis.session.RowBounds;
|
|
/**
|
* @Author: liurunyu
|
* @Date: 2024/12/13 9:53
|
* @Description
|
*/
|
/**
|
* 拦截执行SQL执行场景,并将SQL打印出来
|
* 拦截Executor里面的query和update方法
|
*/
|
@Intercepts({
|
@Signature(
|
method = "query",
|
type = Executor.class,
|
args = {
|
MappedStatement.class,
|
Object.class,
|
RowBounds.class,
|
ResultHandler.class
|
}
|
),
|
@Signature(
|
type = Executor.class,
|
method = "update",
|
args = {
|
MappedStatement.class,
|
Object.class
|
}
|
)
|
})
|
@Slf4j
|
public class PrintSqlInterceptor implements Interceptor {
|
@Override
|
public Object intercept(Invocation invocation) throws Throwable {
|
Object[] args = invocation.getArgs();
|
|
if (args != null && args.length > 1) {
|
MappedStatement mappedStatement = (MappedStatement) args[0];
|
Object parameter = args[1];
|
|
String sqlId = mappedStatement.getId();
|
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
|
Configuration configuration = mappedStatement.getConfiguration();
|
log.info("\nSQL Id: " + sqlId + "\nSQL Parameters: " + boundSql.getParameterObject() + "\nSQL: " + PrintSqlHelp.getFullSql(configuration, boundSql) + "\n");
|
}
|
|
return invocation.proceed();
|
}
|
|
}
|