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