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(); 
 | 
    } 
 | 
  
 | 
} 
 |