package com.jmed.o2o.dao.plugin; import org.apache.ibatis.plugin.*; import org.slf4j.Logger; 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.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.slf4j.LoggerFactory; import java.util.Properties; @Intercepts(value = { @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 }), @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class }) }) public class SqlStatementInterceptor implements Interceptor { private static Logger logger = LoggerFactory.getLogger(SqlStatementInterceptor.class); @Override public Object intercept(Invocation invocation) { MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; String sqlId = mappedStatement.getId(); // 开始时间 long start = System.currentTimeMillis(); try { return invocation.proceed(); } catch (Exception e) { logger.error(sqlId + "执行失败!", e); return null; } finally { long end = System.currentTimeMillis(); long time = end - start; StringBuilder str = new StringBuilder(); str.append(sqlId); str.append(": "); str.append("sql执行时长: "); str.append(time); str.append(" ms."); String sqlInfo = str.toString(); logger.debug(sqlInfo); } } @Override public Object plugin(Object arg0) { return Plugin.wrap(arg0, this); } @Override public void setProperties(Properties arg0) { }