MyBatisPlus高级功能——SQL性能分析打印插件

一、引言

在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,便于程序员排忧解难呐。

MP提供了两种方式,用于输出每条SQL语句及其执行时间,针对执行较长时间的SQL可以停止运行,有助于发现问题。

这两种方式只适用于开发环境,不建议生产环境使用。

二、性能分析插件

该插件 3.2.0 以上版本移除,推荐使用第二种方式(执行SQL分析打印)方式。

步骤一:在MP配置类中配置该插件,并且只适用于DEV环境

/**

 * @Description: MybatisPlus配置类

 */

@Configuration

public class MyBatisPlusConfig {

 /**

     * SQL执行效率插件

     *

     * @return

     */

 @Bean

 @Profile({"dev"}) // 指定环境为dev生效

 public PerformanceInterceptor performanceInterceptor() {

        PerformanceInterceptor interceptor = new PerformanceInterceptor();

 // sql美化打印

        interceptor.setFormat(true);

 // 设置SQL超时时间

        interceptor.setMaxTime(5000L);

 return interceptor;

    }

}

步骤二:设置环境为dev,可以在yml如下配置,或者直接测试类中也是可以设置的,如图。

spring:

 profiles:

 active: dev
image

步骤三:测试测试,在控制台中打印selectList这个方法执行了32 ms,同时也打印了最后执行的sql语句。

@Test

 public void select(){

        List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getAge, 18));

        users.forEach(System.out::println);

    }

DEBUG==>  Preparing: SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,update_time,version FROM sys_user WHERE is_delete='0' AND age = ? 

DEBUG==> Parameters: 18(Integer)

DEBUG<==      Total: 0

 Time:35 ms - ID:com.example.demo.mapper.UserMapper.selectList

Execute SQL:

    SELECT

        id,

        login_name,

        name,

        password,

        email,

        salt,

        sex,

        age,

        phone,

        user_type,

        status,

        organization_id,

        create_time,

        update_time,

        version 

 FROM

        sys_user 

    WHERE

        is_delete='0' 

 AND age = 18

三、执行SQL分析打印

这个功能依赖p6spy组件,完美的输出打印SQL以及执行时长,支持MP3.1.0以上版本。

步骤一:引入p6spy的maven依赖

<!--sql 分析打印-->

<dependency>

    <groupId>p6spy</groupId>

    <artifactId>p6spy</artifactId>

    <version>3.8.2</version>

</dependency>

步骤二:更改yml连接数据库配置,主要修改driver-class-name、url中jdbc后需要加上p6spy

spring:

  datasource:

    driver-class-name: com.p6spy.engine.spy.P6SpyDriver

    url: jdbc:p6spy:mysql://127.0.0.1:3360/test?userSSL=false

    username: root

    password: 123456

  profiles:

    active: dev

步骤三:新增spy.properties文件,内容如下,可以根据需求相对应的修改文件。

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory

# 自定义日志打印

logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger

#日志输出到控制台,解开注释就行了

# appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger

# 指定输出文件位置

logfile=sql.log

# 使用日志系统记录 sql

#appender=com.p6spy.engine.spy.appender.Slf4JLogger

# 设置 p6spy driver 代理

deregisterdrivers=true

# 取消JDBC URL前缀

useprefix=true

# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.

excludecategories=info,debug,result,batch,resultset

# 日期格式

dateformat=yyyy-MM-dd HH:mm:ss

# 实际驱动可多个

#driverlist=org.h2.Driver

# 是否开启慢SQL记录

outagedetection=true

# 慢SQL记录标准 2 秒

outagedetectioninterval=2

步骤四:输出文件格式内容如下

 Consume Time:15 ms 2019-09-20 11:50:31

 Execute SQL:SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,update_time,version FROM sys_user WHERE is_delete='0' AND age = 18

作者:IT贱男
原文链接:https://jiannan.blog.csdn.net/article/details/101054300

推荐阅读更多精彩内容