一、前言
我们来配置一下 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.P6SpyDriver
url: 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()
,观察控制台输出,效果图如下: