web前端三大主流框架「mybatis插件原理」

一、引言

在我們日常開發工作當中,避免不了查看當前程序所執行的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
MyBatisPlus高級功能——SQL性能分析打印插件

步驟三:測試測試,在控制台中打印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://www.506064.com/zh-hk/n/207535.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 14:34
下一篇 2024-12-08 14:34

相關推薦

發表回復

登錄後才能評論