package com.dykj.config; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.plugin.*; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Properties; @Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}), @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})}) public class SqlStatementInterceptor implements Interceptor { public static final Logger log = LoggerFactory.getLogger("sys-sql"); @Override public Object intercept(Invocation invocation) throws Throwable { long startTime = System.currentTimeMillis(); try { return invocation.proceed(); } finally { long timeConsuming = System.currentTimeMillis() - startTime; log.info("执行SQL:{}ms", timeConsuming); if (timeConsuming > 999 && timeConsuming < 5000) { log.info("执行SQL大于1s:{}ms", timeConsuming); } else if (timeConsuming >= 5000 && timeConsuming < 10000) { log.info("执行SQL大于5s:{}ms", timeConsuming); } else if (timeConsuming >= 10000) { log.info("执行SQL大于10s:{}ms", timeConsuming); } } } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { } }