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