跳转到内容

SQL分析与打印

MyBatis-Plus提供了SQL分析与打印的功能,通过集成p6spy组件,可以方便地输出SQL语句及其执行时长。本功能适用于MyBatis-Plus 3.1.0及以上版本。

p6spy简介

p6spy 是一个针对数据库访问进行拦截和记录的工具,它通过代理JDBC驱动程序来工作。这意味着你的应用程序可以像往常一样使用JDBC,而p6spy会在幕后记录所有的SQL语句及其执行时间。这对于开发和调试过程中的SQL优化非常有用。

p6spy不仅限于记录SQL日志,它还提供了一些高级功能,如:

  • 慢SQL检测:通过配置outagedetectionoutagedetectionintervalp6spy可以记录执行时间超过设定阈值的SQL语句。
  • 自定义日志格式:通过logMessageFormat,你可以自定义SQL日志的输出格式,包括时间戳、执行时间、SQL语句等。
  • 日志输出控制appender配置项允许你选择日志输出到控制台、文件或日志系统。

p6spy是一个强大的工具,它为MyBatis-Plus用户提供了便捷的SQL分析与打印功能。通过合理配置,你可以在开发和测试阶段有效地监控和优化SQL语句。然而,由于性能损耗,建议在生产环境中谨慎使用。

示例工程

为了更好地理解如何使用这一功能,可以参考官方提供的示例工程:

依赖引入

首先,需要在项目中引入p6spy依赖。以下是Maven和Gradle两种构建工具的引入方式:

<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>

配置

接下来,需要在application.ymlapplication.properties中进行相应的配置。

application.yml

spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:h2:mem:test
# 其他数据库配置...

spy.properties

p6spy的配置文件spy.properties包含了多个配置项,以下是一些关键配置的示例:

# 模块列表,根据版本选择合适的配置
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志格式
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
# 日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 取消JDBC驱动注册
deregisterdrivers=true
# 使用前缀
useprefix=true
# 排除的日志类别
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动列表
# driverlist=org.h2.Driver
# 开启慢SQL记录
outagedetection=true
# 慢SQL记录标准(单位:秒)
outagedetectioninterval=2

Spring Boot集成

对于Spring Boot项目,可以使用p6spy-spring-boot-starter来简化集成过程。

依赖

<dependency>
<groupId>com.github.gavlyukovskiy</groupId>
<artifactId>p6spy-spring-boot-starter</artifactId>
<version>1.10.0</version>
</dependency>

配置

decorator:
datasource:
p6spy:
# 日志格式
log-format: "\ntime:%(executionTime) || sql:%(sql)\n"
# 自定义日志类
logging: custom
custom-appender-class: com.example.testinit.config.StdoutLogger
public class StdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger {
public void logText(String text) {
System.err.println(text);
}
}

更多关于p6spy-spring-boot-starter的配置信息,请参考GitHub

注意事项

  • driver-class-name应配置为p6spy提供的驱动类。
  • url前缀应为jdbc:p6spy,后跟实际的数据库连接地址。
  • 如果打印的SQL为null,请在excludecategories中增加commit
  • 如果批量操作不打印SQL,请去除excludecategories中的batch
  • 对于批量操作打印重复的问题,请使用MybatisPlusLogFactory(3.2.1新增)。
  • 请注意,该插件可能会带来性能损耗,不建议在生产环境中使用。

通过以上步骤,你就可以在开发过程中方便地分析和打印SQL语句了。记得根据实际需要调整配置,以达到最佳的使用效果。

Baomidou

© 2016-2024 Baomidou™. All Rights Reserved.

Power by Astro Starlight | Sponsored by JetBrains

渝ICP备2021000141号-1 | 渝公网安备50011302222097