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.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]; BoundSql boundSql = mappedStatement.getBoundSql(parameter); String sql = boundSql.getSql(); log.info("\n\nSQL:\n" + sql + "\n"); //System.out.println("SQL语句:" + sql); } return invocation.proceed(); } }