spring boot集成mybatis-plus——Mybatis Plus 打印 SQL 语句(包含执行耗时)

本文介绍了如何在MybatisPlus中使用p6spy来打印SQL语句和执行耗时,详细讲解了引入依赖、配置步骤,并提醒注意该功能不适合生产环境使用,主要适用于本地开发中的性能调试和优化。

Mybatis Plus 打印 SQL 语句(包含执行耗时)

 更新时间 2023-01-08 17:03:24

一、前言

大家好,我是小哈。

《快速入门》 小节中,我们已经使用 Mybatis Plus 对数据库进行了最简单的 CRUD 操作,但是在实际项目中,增删改查操作会更加复杂,接下来,我们将更加深入的学习 Mybatis Plus 的增删改查。

在这之前呢,我们先配置一下 Mybatis Plus 打印 SQL 功能(包括执行耗时),以方便我们更直观的学习 CRUD, 一方面可以了解到每个操作都具体执行的什么 SQL 语句, 另一方面通过打印执行耗时,也可以规避一些慢 SQL,提前做好优化。注意,生产环境不推荐打印执行 SQL,会有数据泄漏风险,仅推荐本地开发使用。

TIP : 此种方式为官方推荐,通过 p6spy 组件来实现完整的 SQL 打印。请使用 Mybatis Plus 3.1.0 以上版本。

二、引入依赖

Maven

<dependency>
  <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>最新版本</version> </dependency> 

TIP: 最新版本 可在 Maven 仓库中查看,链接:https://mvnrepository.com/artifact/p6spy/p6spy

p6spy 最新版本p6spy 最新版本

Gradle

compilegroup: 'p6spy', name: 'p6spy', version: '最新版本'

三、添加配置

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

application.yml 配置文件:

spring:
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://127.0.0.1:3306/test?characterEncoding=utf-8 ... 

注意:

  • driver-class-name 用 p6spy 提供的驱动类;
  • url 前缀为 jdbc:p6spy 跟着冒号,后面对应数据库连接地址;

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

然后在 resources 目录下添加 spy.properties 配置文件:

添加 spy.properties 配置文件添加 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 

四、看看打印效果

配置添加完成后,单元测试执行一条插入语句:

@Test
    void testInsertUser() {
        System.out.println(("----- 开始测试 mybatis-plus 插入数据 ------")); User user = User.builder() .name("犬小哈教程 www.quanxiaoha.com") .age(30) .gender(1) .build(); userMapper.insert(user); } 

打印效果图如下,可以看到完整的打印了执行语句,以及执行耗时为 8ms:

SQL 打印效果图SQL 打印效果图

五、注意点

p6spy 组件请勿在生产环境使用,因为有性能损耗,推荐仅本地开发开启使用。

六、结语

本文给大家介绍了在项目用使用 Mybatis Plus 持久层框架时,如何通过 p6spy 组件完整的打印 SQL 语句,以及执行耗时,此功能对于本地开发非常有帮助,有兴趣的小伙伴赶紧在自己的项目中集成一下吧。

在使用 MyBatis-PlusSpring Boot 整合时,想要 **打印 SQL 语句** 是非常常见的需求,主要用于调试和排查问题。下面我将详细介绍如何开启 SQL 打印,并提供完整配置示例。 --- ## ✅ 方法一:通过 `application.yml` 配置日志输出(推荐) 这是最简单、最常用的方式,利用 MyBatis-Plus 内置的日志功能,配合 Spring Boot 的日志系统输出 SQL。 ### 1. 添加日志配置到 `application.yml` ```yaml # application.yml logging: level: # 设置 Mapper 接口所在的包为 debug 级别,让其输出 SQL com.example.boke.dao: debug # 或者更具体地指定某个 Mapper # com.example.boke.dao.UserDao: debug # 可选:打开 MyBatis-Plus 核心日志 com.baomidou.mybatisplus: debug ``` > 🔍 注意:`com.example.boke.dao` 是你存放 Mapper 接口的包名,请根据实际项目修改! --- ### 2. 确保你的 Mapper 继承了 `BaseMapper` MyBatis-Plus 的 CRUD 方法来自 `BaseMapper`,只有调用这些方法才会被自动追踪。 ```java public interface UserDao extends BaseMapper<User> { // 自定义方法也可以在这里 } ``` --- ### 3. 启动项目查看控制台 SQL 输出 启动后执行一次数据库操作(如查询用户),你应该能在控制台看到类似如下内容: ```sql ==> Preparing: SELECT id,name,password FROM user WHERE name = ? ==> Parameters: zhangsan(String) <== Columns: id, name, password <== Row: 1, zhangsan, 123456 <== Total: 1 ``` 这说明 SQL 已经成功打印出来了。 --- ## ✅ 方法二:使用 MyBatis-Plus 内置性能分析插件(已废弃,仅适用于旧版本) ⚠️ 注意:从 MyBatis-Plus 3.4.0+ 开始,`PerformanceInterceptor` 已被 **移除**,不再支持。 如果你使用的是老版本(<3.4.0),可以这样配置: ```java @Bean @ConditionalOnMissingBean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } ``` 但现在推荐使用 **`p6spy`** 替代。 --- ## ✅ 方法三:使用 `p6spy` 实现格式化 SQL 输出(推荐用于美化 SQL) `p6spy` 是一个数据库代理框架,能拦截 JDBC 操作并输出格式化的 SQL,还能显示执行时间。 ### 1. 添加依赖(Maven) ```xml <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.1</version> </dependency> ``` ### 2. 修改 `application.yml` 中的数据源驱动类 ```yaml spring: datasource: driver-class-name: com.p6spy.engine.spy.P6SpyDriver url: jdbc:p6spy:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 123456 ``` ### 3. 创建 `spy.properties` 文件(放在 `src/main/resources` 目录下) ```properties # spy.properties modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory # 日志输出到控制台 appender=com.p6spy.engine.spy.appender.Slf4JLogger # 是否启用日志过滤(可按 sql 类型过滤) filter=false # 过滤 include/exclude(可选) include = exclude = # 自定义日志格式 logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat customLogMessageFormat=%(time)|%(executionTime) ms|%(category)|connection %(connectionId)\n%(sql)%n ``` ✅ 输出效果示例: ``` 17:23:45.123|12 ms|statement|connection 1 SELECT id,name FROM user WHERE name='zhangsan' ``` 优点: - 显示执行耗时 - 格式清晰 - 支持所有数据库操作(包括批量、事务等) --- ## ✅ 补充:开启 MyBatis 极简日志实现(备用方案) 如果只想看基本 SQL,也可在 `application.yml` 中添加: ```yaml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` 这个会直接把 SQL 打印到标准输出,适合快速调试。 --- ## 🧩 总结对比表 | 方式 | 是否推荐 | 特点 | |------|----------|------| | `logging.level.mapper_package: debug` | ✅ 推荐 | 简单易用,无需额外依赖 | | `StdOutImpl` 日志实现 | ✅ 推荐 | 快速启用,适合初学者 | | `p6spy` | ✅✅ 强烈推荐(生产友好) | 格式化输出、带执行时间、可监控慢查询 | | `PerformanceInterceptor` | ❌ 不推荐 | 已废弃 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值