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

步驟三:測試測試,在控制檯中打印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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章