package com.csw.mybatisSpringboot.config.IndexInterception;
import org.apache.ibatis.executor.statement.StatementHandler;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
@Component
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class IndexCheckInterceptor implements Interceptor {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public Object intercept(Invocation invocation) throws Throwable {
String osName = System.getProperty("os.name");
if (!osName.toLowerCase().contains("linux")) {
System.out.println("当前运行环境是 Linux。");
// 获取 StatementHandler
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
// 获取 SQL 语句
String sql = statementHandler.getBoundSql().getSql();
// 在这里可以对 SQL 进行分析,判断是否使用了索引
// 可以通过解析 SQL 语句或者调用数据库的工具来进行判断
// 如果没有使用索引,可以进行日志记录或者抛出异常等处理
Connection connection = (Connection) invocation.getArgs()[0];
Statement explainStatement = connection.createStatement();
ResultSet resultSet = explainStatement.executeQuery("EXPLAIN " + sql.replace("?", "1"));
// 解析结果集,判断是否使用了索引
boolean usesIndex = false;
while (resultSet.next()) {
String possibleIndex = resultSet.getString("key");
if (possibleIndex != null && !possibleIndex.isEmpty()) {
usesIndex = true;
} else {
usesIndex = false;
break;
}
}
if (!usesIndex) {
// 没有使用索引,进行日志记录或其他处理
logger.error("【没有走索引】: {}", sql.replace("?", "1"));
}
}
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Interceptor.super.plugin(target);
}
@Override
public void setProperties(Properties properties) {
Interceptor.super.setProperties(properties);
}
}
mybatis-plus筛选出未走索引的sql
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 看下spring boot配置文件中的mybatis部分 一般配置debug级别日志,基本日志都能输出了,之前配置...
- mybatis-plus忽略映射字段[https://www.cnblogs.com/jym-sunshine/p...
- 一. Mybatis-Plus的实体类注解 1. @TableName注解 @TableName(value = ...
- 使用Mybatis-plus(以下简称MP,当前最新版本为v3.4.3.4)在单表操作上真的是非常的舒适,代码写到...
- 工作中可能会遇到一个项目要在不同的数据库环境中切换,我们利用MybatisPlus可以实现大部分的功能,但是如果遇...