p6spy 組件打印完整的 SQL 語句、執行耗時

一、前言

我們來配置一下 Mybatis Plus 打印 SQL 功能(包括執行耗時),一方面可以了解到每個操作都具體執行的什么 SQL 語句, 另一方面通過打印執行耗時,也可以提前發現一些慢 SQL,提前做好優化, 省得 DBA 公開處刑。注意,生產環境不推薦打印執行 SQL,會有數據泄漏風險,僅推薦本地開發使用。

TIP : 此種方式為官方推薦,通過?p6spy?組件來實現完整的 SQL 打印。請使用 Mybatis Plus 3.1.0 以上版本。

二、添加依賴

主項目 的?pom.xml?文件中,聲明?p6spy?依賴的版本號:

<properties>// 省略...<p6spy.version>3.9.1</p6spy.version></properties><dependencyManagement><dependencies>// 省略...<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>${p6spy.version}</version></dependency></dependencies></dependencyManagement>

?然后在 xx-module-common?模塊中的?pom.xml?文件中,引入該依賴:

<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId></dependency>

三、添加配置

3.1 第一步:修改?application-dev.yml?配置文件

application-dev.yml?配置文件:

spring:datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:mysql://127.0.0.1:3306/weblog?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull...

注意:

  • driver-class-name?: 修改為?p6spy?提供的驅動類;
  • url?: 修改為前綴為?jdbc:p6spy?跟著冒號,后面對應數據庫連接地址;

3.2 第二步:添加?p6spy?配置文件

然后在 xx-web?模塊中的?resources?目錄下添加?spy.properties?配置文件:

配置文件內容如下:

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定義日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志輸出到控制臺
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系統記錄 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,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 實際驅動可多個
#driverlist=org.h2.Driver
# 是否開啟慢SQL記錄
outagedetection=true
# 慢SQL記錄標準 2 秒
outagedetectioninterval=2

四、看看最終效果

建表

在數據庫右鍵,新建查詢:

執行如下建表語句:

CREATE TABLE `t_user` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`username` varchar(60) NOT NULL COMMENT '用戶名',`password` varchar(60) NOT NULL COMMENT '密碼',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新時間',`is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '邏輯刪除:0:未刪除 1:已刪除',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `uk_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

實體類

在?/dos?包中,新建一個?UserDO?類,字段和數據庫中的字段通過轉駝峰的形式對應一一對應起來,MP 框架會默認通過這種規則將字段光聯在一起,內容如下:

package com.yanxiaosheng.xx.common.domain.dos;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;/*** @author: 閆小生* @date: 2023-08-22 17:01* @description: TODO**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("t_user")
public class UserDO {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Date createTime;private Date updateTime;private Boolean isDeleted;
}

新建 Mapper 接口

在?mapper包中,創建一個?UserMapper?接口,代碼如下:

package com.yanxiaosheng.xx.common.domain.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.quanxiaoha.weblog.common.domain.dos.UserDO;/*** @author: 閆小生* @date: 2023-08-22 17:06* @description: TODO**/
public interface UserMapper extends BaseMapper<UserDO> {
}

至此,用于操作數據的前置代碼都搞定了。

新增一條用戶記錄

接下來,我們通過單元測試,往數據庫中添加一個測試記錄,看看能否新增成功。在 xx-web?模塊中的單元測試類中,新增一個測試方法,代碼如下:

配置添加完成后,單元測試方法?insertTest()?,觀察控制臺輸出,效果圖如下:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40558.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40558.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

layui中添加上下文提示彈窗

<p context-tip"自定義上下文提示信息">段落內容...</p> <div context-tip"自定義上下文提示信息">div內容...</div>// 懸浮提示 $("body").on("mouseenter", "*[context-tip]", function () {v…

操作系統僵尸進程、CFS、上下文切換

進程 Linux的進程調度 CFS 完全公平調度算法 權重和nice值 權重&#xff1a;權重越大&#xff0c;分配的時間比例越大&#xff0c;就相當于進程的優先級越高。 進程的時間 C P U 總時間 ? 進程的權重 / 就緒隊列所有進程權重之和 進程的時間 CPU總時間 * 進程的權重/就緒…

電腦鼠標一直轉圈圈怎么處理?對癥下藥,分享6種方法

在使用電腦的過程中&#xff0c;鼠標一直轉圈圈是一個常見且令人困擾的問題。這種情況通常意味著系統正在處理某些任務&#xff0c;但如果持續時間過長&#xff0c;可能表明系統存在性能問題或錯誤。本文將詳細探討鼠標一直轉圈圈的常見原因及其解決方法。 摘要 電腦鼠標一直轉…

概述:監督學習(分類,回歸)與無監督學習(聚類)

目錄&#xff1a; 一、監督學習&#xff1a;1.什么是監督學習&#xff1a;2.監督學習類型: 二、無監督學習1.什么是無監督學習&#xff1a;2.無監督學習類型: 一、監督學習&#xff1a; 1.什么是監督學習&#xff1a; 當前創造市場價值的機器學習中99%都是監督學習。監督學習…

Django實現部門管理功能

在這篇文章中,我們將介紹如何使用Django框架實現一個簡單的部門管理功能。這個功能包括部門列表展示、添加新部門、編輯和刪除部門等操作。 1. 項目設置 首先,確保你已經安裝了Django并創建了一個新的Django項目。在項目中,我們需要創建一個名為??app01??的應用。 2.…

【前端項目筆記】8 訂單管理

訂單管理 效果展示&#xff1a; 在開發功能之前先創建分支order cls 清屏 git branch 查看所有分支&#xff08;*代表當前分支&#xff09; git checkout -b order 新建分支order git push -u origin order 將本地的當前分支提交到云端倉庫origin中命名為order 通過路由方式…

JAVA 和Python對比

JAVA 和Python對比 1 . 數據類型 python Int&#xff0c;float&#xff0c;complex numbers 都沒有定義到底占用多少個字節空間。都是沒有取值范圍&#xff0c;也沒有無符號的情況。 JAVA JAVA 有基礎數據類型&#xff0c;都有確定占多少個字節 2. 全局變量 python 類似…

基于精益轉型打造醫療電子運營新模式

為了保持競爭優勢并滿足日益增長的客戶需求&#xff0c;許多企業開始探索精益轉型之路&#xff0c;以打造醫療電子運營的新模式。本文&#xff0c;深圳天行健精益管理咨詢公司將從精益轉型的概念、實施策略以及面臨的挑戰等方面&#xff0c;深入探討如何通過精益轉型實現醫療電…

面試問題C++

當你將一個無符號整型(unsigned integer)轉換為一個有符號整型(signed integer)時,具體的值取決于原始無符號整型的值以及目標有符號整型的大小。 轉換規則: 如果無符號整型的值在有符號整型的可表示范圍內(即它小于等于INT_MAX),則轉換后的值將保持不變。如果無符號…

【數據結構】(C語言):堆(二叉樹的應用)

堆&#xff1a; 此處堆為二叉樹的應用&#xff0c;不是計算機中用于管理動態內存的堆。形狀是完全二叉樹。堆分兩種&#xff1a;最大堆&#xff0c;最小堆。最大堆&#xff1a;每個節點比子樹所有節點的數值都大&#xff0c;根節點為最大值。最小堆&#xff1a;每個節點比子樹…

python-opencv多態模板匹配簡單代碼實現

在我實驗過程中發現&#xff0c;這種模板匹配如果不做任何處理只對原有圖像進行匹配的話&#xff0c;好像效果很瓜 貌似是模板是1 那就只能檢測出正常形態下的1&#xff0c;變大或者是 l 都不一定檢測到&#xff0c; 也就是說&#xff0c;只能檢測和模板圖片大小尺寸顏色類別…

docker 安裝 禪道

docker pull hub.zentao.net/app/zentao:20.1.1 sudo docker network create --subnet172.172.172.0/24 zentaonet 使用 8087端口號訪問 使用禪道mysql 映射到3307 sudo docker run \ --name zentao2 \ -p 8087:80 \ -p 3307:3306 \ --networkzentaonet \ --ip 172.172.172.…

電腦錄制視頻的軟件,電腦錄制,4款免費軟件推薦

在數字化時代&#xff0c;電腦錄制視頻的軟件已成為我們日常生活和工作中的得力助手&#xff0c;這些軟件可以幫助我們輕松捕獲到屏幕上的精彩瞬間。但同時市面上的錄制視頻軟件也層出不窮&#xff0c;讓人不知該如何選擇。到底怎樣才能選擇到一款適合自己的錄屏軟件呢&#xf…

【SpringBoot3學習 | 第2篇】SpringBoot3整合+SpringBoot3項目打包運行

文章目錄 一. SpringBoot3 整合 SpringMVC1.1 配置靜態資源位置1.2 自定義攔截器&#xff08;SpringMVC配置&#xff09; 二. SpringBoot3 整合 Druid 數據源三. SpringBoot3 整合 Mybatis3.1 Mybatis整合3.2 聲明式事務整合配置3.3 AOP整合配置 四. SpringBoot3 項目打包和運行…

k8s-第二節-常用操作

k8s命令行常用操作 k8s命令行 操作對象時都要前面聲明操作對象類型 kubectl get kubectl describe kubectl delete kubectl edit kubectl logs kubectl exec kubectl port-forward 端口轉發將pod 端口映射出來 kubectl cp 本地文件路徑:容器文件路徑 kubectl apply …

【JS場景題】判斷一個元素是否在可視區域內有哪些方法?

方法一、通過元素的位置信息和滾動條滾動的高度來判斷 前置知識 clientWidth: 元素的內容區域寬度加上左右內邊距寬度。offsetTop: 元素的上外邊框至包含元素的上內邊框之間的像素距離。document.documentElement.clientHeight&#xff1a; 獲取視口高度&#xff08;不包含滾動…

《Attention Is All You Need》解讀

一、簡介 “Attention Is All You Need” 是一篇由Ashish Vaswani等人在2017年發表的論文&#xff0c;它在自然語言處理領域引入了一種新的架構——Transformer。這個架構現在被廣泛應用于各種任務&#xff0c;如機器翻譯、文本摘要、問答系統等。Transformer模型的核心是“自…

小學vr虛擬課堂教學課件開發打造信息化教學典范

在信息技術的浪潮中&#xff0c;VR技術正以其獨特的魅力與課堂教學深度融合&#xff0c;引領著教育方式的創新與教學方法的變革。這一變革不僅推動了“以教促學”的傳統模式向“自主探索”的新型學習方式轉變&#xff0c;更為學生帶來了全新的學習體驗。 運用信息技術融合VR教學…

深度學習1

1.支持向量機Support Vector Machine&#xff08;SVM&#xff09;是一種對數據二分類的線性分類器&#xff0c;目的是尋找一個超平面對樣本進行分割&#xff0c;廣泛應用人像識別&#xff0c;手寫數字識別&#xff0c;生物信息識別。 二維空間分割界是一條直線&#xff0c;在三…

table = collections.defaultdict(list)申請的字典的類型是什么?

當你使用 collections.defaultdict(list) 來申請一個字典時&#xff0c;這個字典的類型是 defaultdict&#xff0c;但是其行為和表現方式在某些方面與普通的字典&#xff08;dict&#xff09;相似&#xff0c;主要區別在于它如何處理缺失的鍵。 defaultdict 是 Python 標準庫 …