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