亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis-Plus中SQL分析與打印

 更新時間:2025年06月30日 10:28:27   作者:你知道“鐵甲小寶”嗎丶  
MyBatis-Plus通過集成p6spy實現(xiàn)SQL分析與打印,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

MyBatis-Plus提供了SQL分析與打印的功能,通過集成p6spy組件,可以方便地輸出SQL語句及其執(zhí)行時長。本功能適用于MyBatis-Plus 3.1.0及以上版本。

一、p6spy簡介

p6spy 是一個針對數(shù)據(jù)庫訪問進行攔截和記錄的工具,它通過代理JDBC驅(qū)動程序來工作。這意味著你的應用程序可以像往常一樣使用JDBC,而p6spy會在幕后記錄所有的SQL語句及其執(zhí)行時間。這對于開發(fā)和調(diào)試過程中的SQL優(yōu)化非常有用。

p6spy不僅限于記錄SQL日志,它還提供了一些高級功能,如:

  • 慢SQL檢測:通過配置outagedetection和outagedetectioninterval,p6spy可以記錄執(zhí)行時間超過設(shè)定閾值的SQL語句。
  • 自定義日志格式:通過logMessageFormat,你可以自定義SQL日志的輸出格式,包括時間戳、執(zhí)行時間、SQL語句等。
  • 日志輸出控制:appender配置項允許你選擇日志輸出到控制臺、文件或日志系統(tǒng)。
  • p6spy是一個強大的工具,它為MyBatis-Plus用戶提供了便捷的SQL分析與打印功能。通過合理配置,你可以在開發(fā)和測試階段有效地監(jiān)控和優(yōu)化SQL語句。然而,由于性能損耗,建議在生產(chǎn)環(huán)境中謹慎使用。

二、示例工程

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

mybatis-plus-sample-crud

1. 依賴引入

首先,需要在項目中引入p6spy依賴。以下是Maven和Gradle兩種構(gòu)建工具的引入方式:

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

2. 配置

接下來,需要在application.ymlapplication.properties中進行相應的配置。

application.yml

spring:
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:h2:mem:test
    # 其他數(shù)據(jù)庫配置...

spy.properties

p6spy的配置文件spy.properties包含了多個配置項,以下是一些關(guān)鍵配置的示例:

# 模塊列表,根據(jù)版本選擇合適的配置
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驅(qū)動注冊
deregisterdrivers=true

# 使用前綴
useprefix=true

# 排除的日志類別
excludecategories=info,debug,result,commit,resultset

# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss

# 實際驅(qū)動列表
# driverlist=org.h2.Driver

# 開啟慢SQL記錄
outagedetection=true

# 慢SQL記錄標準(單位:秒)
outagedetectioninterval=2

三、Spring Boot集成

對于Spring Boot項目,可以使用p6spy-spring-boot-starter來簡化集成過程。

1. 依賴

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

2. 配置

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);
    }
}

更多關(guān)于p6spy-spring-boot-starter的配置信息,請參考GitHub

3. 注意事項

  • driver-class-name應配置為p6spy提供的驅(qū)動類。
  • url前綴應為jdbc:p6spy,后跟實際的數(shù)據(jù)庫連接地址。
  • 如果打印的SQL為null,請在excludecategories中增加commit。
  • 如果批量操作不打印SQL,請去除excludecategories中的batch
  • 對于批量操作打印重復的問題,請使用MybatisPlusLogFactory(3.2.1新增)。
  • 請注意,該插件可能會帶來性能損耗,不建議在生產(chǎn)環(huán)境中使用。

四、實戰(zhàn)

1. 依賴

<!-- https://mvnrepository.com/artifact/com.github.gavlyukovskiy/p6spy-spring-boot-starter -->
<dependency>
    <groupId>com.github.gavlyukovskiy</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
    <version>1.9.1</version>
</dependency>

2. 配置(spy.properties)

# 模塊列表,根據(jù)版本選擇合適的配置
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定義日志格式
logMessageFormat=org.example.springboot3.mybatisplus.util.P6SpyLogger
# 日志輸出到控制臺(default is com.p6spy.engine.spy.appender.FileLogger)
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#appender=com.p6spy.engine.spy.appender.FileLogger
#自定義輸出
appender=org.example.springboot3.mybatisplus.util.StdoutLogger
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 開啟慢查詢?nèi)罩?
outagedetection=true
outagedetectioninterval=2
# 自定義日志文件名
logfile=spy.log
append=true

3. 配置類

P6SpyLogger

package org.example.springboot3.mybatisplus.util;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

/**
 * Create by zjg on 2024/7/6
 */
public class P6SpyLogger implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        String text = StringUtils.isNotBlank(sql) ? " Consume Time:" + elapsed + " ms " + now + "\n Execute SQL:" + sql.replaceAll("[\\s]+", " ") : "";;
        if(elapsed>1000){
            System.err.println(text);
            text="";
        }
        return text;
    }
}

StdoutLogger

package org.example.springboot3.mybatisplus.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

/**
 * Create by zjg on 2024/7/6
 */
@Slf4j
public class StdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger {
    public void logText(String text) {
        if(StringUtils.hasLength(text)){
            log.debug(text);
        }
    }
}

4. 測試類

package org.example.springboot3.mybatisplus.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.example.springboot3.mybatisplus.model.User;
import org.example.springboot3.mybatisplus.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * Create by zjg on 2024/7/6
 */
@Slf4j
@RestController
@RequestMapping("/p6spy/")
public class P6SpyController {
    @Autowired
    UserService userService;
    @RequestMapping("list")
    public void list() {
        // 查詢所有用戶
        LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(User.class).isNotNull(User::getName).isNotNull(User::getId).orderByAsc(User::getId).orderByAsc(User::getName);
        List<User> users = userService.list(queryWrapper);// 調(diào)用 list 方法
        log.debug(String.valueOf(users.size()));
    }
}

5. 結(jié)果

在這里插入圖片描述

在這里插入圖片描述

總結(jié)

通過以上步驟,你就可以在開發(fā)過程中方便地分析和打印SQL語句了。記得根據(jù)實際需要調(diào)整配置,以達到最佳的使用效果。

到此這篇關(guān)于MyBatis-Plus中SQL分析與打印的文章就介紹到這了,更多相關(guān)MyBatis-Plus SQL打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java線程池的7大核心參數(shù)

    淺談Java線程池的7大核心參數(shù)

    本篇文章基于正在看這篇文章的你已經(jīng)具備了基本的Java并發(fā)的相關(guān)知識.如果對于Java并發(fā)編程一無所知的話,請先看看Java并發(fā)編程的一些前導基礎(chǔ)知識,文中有非常詳細的圖文示例及代碼,,需要的朋友可以參考下
    2021-05-05
  • 工廠方法在Spring框架中的運用

    工廠方法在Spring框架中的運用

    這篇文章介紹了工廠方法在Spring框架中的運用,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 淺談Java中ArrayList線程不安全怎么辦

    淺談Java中ArrayList線程不安全怎么辦

    本文主要介紹了Java中ArrayList線程不安全怎么辦,主要有三種解決的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springboot使用消息中間件

    springboot使用消息中間件

    這篇文章主要介紹了springboot使用消息中間件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 必知必會的SpringBoot實現(xiàn)熱部署兩種方式

    必知必會的SpringBoot實現(xiàn)熱部署兩種方式

    這篇文章主要為大家介紹了必知必會的SpringBoot實現(xiàn)熱部署兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java多線程用法的實例詳解

    Java多線程用法的實例詳解

    這篇文章主要介紹了Java多線程用法的實例詳解的相關(guān)資料,希望通過本文大家能夠理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Java設(shè)計模式之代理模式詳解

    Java設(shè)計模式之代理模式詳解

    這篇文章主要介紹了Java設(shè)計模式之代理模式詳解,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • java讀取文件和寫入文件的方式(簡單實例)

    java讀取文件和寫入文件的方式(簡單實例)

    下面小編就為大家?guī)硪黄猨ava讀取文件和寫入文件的方式(簡單實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 通過實例解析Java List正確使用方法

    通過實例解析Java List正確使用方法

    這篇文章主要介紹了通過實例解析Java List正確使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用

    詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用

    這篇文章主要介紹了詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用,是Java入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09

最新評論