【MySQL】Mybatis-Plus解决多数据源无法输出SQL语句的问题
2023-09-11 14:21:35 时间
一. Mybatis-Plus配置输出SQL语句
1. 原理
使用PerformanceInterceptor拦截器的intercept()方法输出SQL语句
2. 步骤
2.1 配置文件新增
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.2 新增PerformanceInterceptor对象
public class MybatisPlusConfig {
@Bean
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setWriteInLog(true);
return performanceInterceptor;
}
}
2.3 控制台输出
Time:执行耗时
Execute SQL:SELECT * FROM table WHERE ID=1 (SQL语句)
二. 多数据源无法输出SQL语句解决方法
SqlSessionFactory对象初始化时新增代码
public SqlSessionFactory sqlSessionFactory()
{
MybatisConfiguration configuration = new MybatisConfiguration();
// 新增代码
configuration.addInterceptor(new PerformanceInterceptor());
sqlSessionFactory.setConfiguration(configuration);
}
三. 输出SQL部分源码
public class PerformanceInterceptor implements Interceptor {
public Object intercept(Invocation invocation) throws Throwable {
// 其它代码
// 计算执行 SQL 耗时
long start = SystemClock.now();
Object result = invocation.proceed();
long timing = SystemClock.now() - start;
// 格式化 SQL 打印执行结果
Object target = PluginUtils.realTarget(invocation.getTarget());
MetaObject metaObject = SystemMetaObject.forObject(target);
MappedStatement ms = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
StringBuilder formatSql = new StringBuilder();
// 执行耗时
formatSql.append(" Time:").append(timing);
// Mapper接口方法完整路径
formatSql.append(" ms - ID:").append(ms.getId());
// SQL语句
formatSql.append("\n Execute SQL:").append(SqlUtils.sqlFormat(originalSql, format)).append("\n");
if (this.isWriteInLog()) {
if (this.getMaxTime() >= 1 && timing > this.getMaxTime()) {
logger.error(formatSql.toString());
} else {
logger.debug(formatSql.toString());
}
} else {
System.err.println(formatSql.toString());
if (this.getMaxTime() >= 1 && timing > this.getMaxTime()) {
throw new MybatisPlusException(" The SQL execution time is too large, please optimize ! ");
}
}
return result;
}
}
相关文章
- Mysql加锁过程详解(3)-关于mysql 幻读理解
- 高性能mysql 4,5,6章优化总结
- DataX-MySQL(读写)
- 【MySQL高级】Mysql并发参数调整及常用SQL技巧
- mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid) 的解决方法
- 工具--将MySQL数据库表信息导出生成word文档
- 【mysql】MySQL的sql_mode模式说明及设置
- 【mysql问题】解决2003-Can‘t connect to MySQL server on ‘ ‘(10060“Unknown error“)
- 五、Mysql - 用户管理 - 授权
- MySQL数据库设计规范
- 基于Spring Boot + MyBatis + MySQL + Redis + FreeMarker而设计开发的问答网站【100010424】
- 基于Java(Spring+SpringMVC+Mybatis)+MySQL实现(Web)校园二手交易平台【100010270】
- mysql Mybatis井号#与$的区别
- mysql 语句解释执行顺序
- MySql常见命令、函数
- 转 mysql spool_用MySQL实现类似Oracle SPOOL的功能
- sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
- Windows 免安装版mysql,适用于版本MySQL 5.7.7及以上,快速配置教程
- 基于 mysql 异步驱动的非阻塞 Mybatis【待验证】
- mysql 行转列
- mybatis使用记录:#{}与${}区别、缓存机制、传递数组参数和List参数时if-test判空和判断长度的写法、Mybatis查询数据返回基本类型数组
- SpringBoot+mybatis-plus+mysql实现简单后台管理demo
- MySQL更改表的存储引擎
- JDBC连接MySQL数据库及演示样例
- mysql常用压测工具