zoukankan      html  css  js  c++  java
  • mybatis拦截器实现查看sql执行效率

    import java.sql.Statement;
    import java.util.Properties;
    
    import org.apache.ibatis.executor.statement.StatementHandler;
    import org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl;
    import org.apache.ibatis.mapping.BoundSql;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.plugin.Intercepts;
    import org.apache.ibatis.plugin.Invocation;
    import org.apache.ibatis.plugin.Plugin;
    import org.apache.ibatis.plugin.Signature;
    import org.apache.ibatis.session.ResultHandler;
    
    /**
     * Sql执行时间记录拦截器
     */
    @Intercepts({
            @Signature(type = StatementHandler.class, method = "query", args = { Statement.class, ResultHandler.class }),
            @Signature(type = StatementHandler.class, method = "update", args = { Statement.class }),
            @Signature(type = StatementHandler.class, method = "batch", args = { Statement.class }) })
    public class SqlCostInterceptor implements Interceptor {
    
        private static final JakartaCommonsLoggingImpl logger = new JakartaCommonsLoggingImpl("SqlCostInterceptor");
    
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            long startTime = System.currentTimeMillis();
            StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
            final BoundSql boundSql = statementHandler.getBoundSql();
            try {
                return invocation.proceed();
            } finally {
                final StringBuilder build = new StringBuilder(7);
                build.append("<==  Preparing: ");
                build.append("
    ");
                build.append(boundSql.getSql());
                build.append("
    ");
                build.append("MYBATIS-SQL执行耗时[");
                build.append((System.currentTimeMillis() - startTime));
                build.append("ms]");
                logger.debug(build.toString());
            }
        }
    
        @Override
        public Object plugin(Object target) {
            return Plugin.wrap(target, this);
        }
    
        @Override
        public void setProperties(Properties properties) {
        }
    
    }
  • 相关阅读:
    springboot跨域解决
    python实现LRUCache
    oracle整库统计库表数据量--存储过程
    oracle整库统计库表各个字段数据最大长度--存储过程
    mysql数据库初始化脚本分组批量执行
    maven profile 的作用
    配置中包含maven属性,在idea中本地启动无法正常获取配置
    个人随笔
    Java接口interface field及method
    如何将.net core项目部署到IIS上?
  • 原文地址:https://www.cnblogs.com/light-zhang/p/8398458.html
Copyright © 2011-2022 走看看