最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ū)動程序來工作。這意味著你的應(yīng)用程序可以像往常一樣使用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中進行相應(yīng)的配置。

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應(yīng)配置為p6spy提供的驅(qū)動類。
  • url前綴應(yīng)為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)文章

最新評論

杂多县| 保康县| 乐陵市| 乳源| 漳浦县| 天长市| 东乡族自治县| 临夏县| 京山县| 乃东县| 普陀区| 永德县| 英吉沙县| 南川市| 安图县| 清水河县| 张家港市| 无极县| 瑞安市| 泾川县| 新乡市| 筠连县| 虹口区| 安顺市| 临沭县| 始兴县| 驻马店市| 阿巴嘎旗| 沾化县| 克拉玛依市| 融水| 饶平县| 开远市| 玉溪市| 沈丘县| 河南省| 苍南县| 巴里| 正阳县| 卓资县| 龙江县|