一、引言
在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,便于程序员排忧解难呐。
MP提供了两种方式,用于输出每条SQL语句及其执行时间,针对执行较长时间的SQL可以停止运行,有助于发现问题。
这两种方式只适用于开发环境,不建议生产环境使用。
二、性能分析插件
该插件 3.2.0 以上版本移除,推荐使用第二种方式(执行SQL分析打印)方式。
步骤一:在MP配置类中配置该插件,并且只适用于DEV环境
/**
* @Description: MybatisPlus配置类
*/
@Configuration
public class MyBatisPlusConfig {
/**
* SQL执行效率插件
*
* @return
*/
@Bean
@Profile({\"dev\"}) // 指定环境为dev生效
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor interceptor = new PerformanceInterceptor();
// sql美化打印
interceptor.setFormat(true);
// 设置SQL超时时间
interceptor.setMaxTime(5000L);
return interceptor;
}
}
步骤二:设置环境为dev,可以在yml如下配置,或者直接测试类中也是可以设置的,如图。
spring:
profiles:
active: dev
步骤三:测试测试,在控制台中打印selectList这个方法执行了32 ms,同时也打印了最后执行的sql语句。
@Test
public void select(){
List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getAge, 18));
users.forEach(System.out::println);
}
DEBUG==> Preparing: SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,update_time,version FROM sys_user WHERE is_delete=\'0\' AND age = ?
DEBUG==> Parameters: 18(Integer)
DEBUG<== Total: 0
Time:35 ms - ID:com.example.demo.mapper.UserMapper.selectList
Execute SQL:
SELECT
id,
login_name,
name,
password,
email,
salt,
sex,
age,
phone,
user_type,
status,
organization_id,
create_time,
update_time,
version
FROM
sys_user
WHERE
is_delete=\'0\'
AND age = 18
三、执行SQL分析打印
这个功能依赖p6spy组件,完美的输出打印SQL以及执行时长,支持MP3.1.0以上版本。
步骤一:引入p6spy的maven依赖
<!--sql 分析打印-->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.2</version>
</dependency>
步骤二:更改yml连接数据库配置,主要修改driver-class-name、url中jdbc后需要加上p6spy
spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://127.0.0.1:3360/test?userSSL=false
username: root
password: 123456
profiles:
active: dev
步骤三:新增spy.properties文件,内容如下,可以根据需求相对应的修改文件。
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台,解开注释就行了
# appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 指定输出文件位置
logfile=sql.log
# 使用日志系统记录 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,batch,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
步骤四:输出文件格式内容如下
Consume Time:15 ms 2019-09-20 11:50:31
Execute SQL:SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,update_time,version FROM sys_user WHERE is_delete=\'0\' AND age = 18
作者:IT贱男
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。