【MySQL】Mybatis-Plus解决多数据源无法输出SQL语句的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【MySQL】Mybatis-Plus解决多数据源无法输出SQL语句的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2059字,纯文字阅读大概需要3分钟。
内容图文
![【MySQL】Mybatis-Plus解决多数据源无法输出SQL语句的问题](/upload/InfoBanner/zyjiaocheng/863/bcca49e477a54b038b8bdcae3d349bab.jpg)
一. 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】Mybatis-Plus解决多数据源无法输出SQL语句的问题全部内容,希望文章能够帮你解决【MySQL】Mybatis-Plus解决多数据源无法输出SQL语句的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。