一、前言
我們來配置一下 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()
?,觀察控制臺輸出,效果圖如下: