在MyBatis中实现控制台输出SQL参数的具体方案

 更新时间:2025年12月26日 09:07:55   作者:hellotutu  
本文介绍了在MyBatis中实现控制台输出SQL参数的几种方法,包括使用MyBatis-Plus的SqlLogInterceptor、log4jdbc工具、自定义拦截器以及注意事项,需要的朋友可以参考下

在 MyBatis 中实现控制台输出 SQL 参数,可通过以下方案实现:

一、使用 MyBatis-Plus 的 SqlLogInterceptor(推荐)

‌适用场景‌: 项目已集成 MyBatis-Plus(3.5.3+版本)

‌配置步骤‌:

‌1、添加拦截器‌:

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new SqlLogInterceptor());
        return interceptor;
    }
}

‌2、配置日志输出‌(application.yml):

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

此方案可直接输出完整 SQL(参数替换为真实值)。

二、通过 log4jdbc 工具输出完整 SQL

‌适用场景‌: 需独立查看带参数的 SQL,不依赖 MyBatis-Plus
‌步骤‌:

1‌、添加依赖‌:

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
</dependency>

‌2、修改 JDBC 驱动配置‌:

# 原 JDBC URL 前追加 "jdbc:log4jdbc:"
spring:
  datasource:
    url: jdbc:log4jdbc:mysql://localhost:3306/dbname
    driver-class-name: net.sf.log4jdbc.DriverSpy

‌3、配置日志级别‌(logback.xml):

<logger name="jdbc.sqlonly" level="DEBUG"/>  <!-- 仅输出 SQL -->
<logger name="jdbc.sqltiming" level="INFO"/> <!-- 输出 SQL 及执行时间 -->

此工具支持参数替换及 SQL 格式化。

三、自定义拦截器输出参数(原始 MyBatis)

‌适用场景‌: 需定制化输出格式
‌实现步骤‌:

‌1、创建拦截器类‌:

@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),
             @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class SqlParamInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Object parameter = invocation.getArgs()[1];
        // 解析参数并拼接 SQL
        System.out.println("Params: " + parameter);
        return invocation.proceed();
    }
}

2‌、注册拦截器‌(mybatis-config.xml):

<plugins>
    <plugin interceptor="com.example.interceptor.SqlParamInterceptor"/>
</plugins>

此方式需自行解析参数绑定逻辑,灵活性高但实现复杂。

四、注意事项

1‌、性能影响‌

输出完整 SQL 会增加日志量,生产环境建议关闭 DEBUG 级别日志。

2、参数敏感信息‌

若 SQL 含敏感参数(如密码),需过滤或脱敏处理。

3‌、IDE 工具支持‌

IDEA 可通过安装插件(如 MyBatis Log Plugin)直接查看参数替换后的 SQL。

到此这篇关于在MyBatis中实现控制台输出SQL参数的具体方案的文章就介绍到这了,更多相关MyBatis控制台输出SQL参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Java中Spring Boot+Socket实现与html页面的长连接实例详解

    这篇文章主要介绍了Java中Spring Boot+Socket实现与html页面的长连接实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • springboot中bean的加载顺序问题

    springboot中bean的加载顺序问题

    这篇文章主要介绍了springboot中bean的加载顺序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • java中对list分页并显示数据到页面实例代码

    java中对list分页并显示数据到页面实例代码

    这篇文章主要介绍了java中对list分页并显示数据到页面实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java并发编程之Fork/Join框架详解

    Java并发编程之Fork/Join框架详解

    这篇文章主要介绍了Java并发编程之Fork/Join框架详解,Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架,需要的朋友可以参考下
    2023-12-12
  • 使用Java应用程序添加或删除 PDF 中的附件

    使用Java应用程序添加或删除 PDF 中的附件

    当我们在制作PDF文件或者PPT演示文稿的时候,为了让自己的文件更全面详细,就会在文件中添加附件,那么如何添加或删除PDF中的附件呢,今天通过本文给大家详细讲解,需要的朋友参考下吧
    2023-01-01
  • Spring Boot集成Swagger2项目实战

    Spring Boot集成Swagger2项目实战

    在日常的工作中,我们往往需要给前端(WEB端、IOS、Android)或者第三方提供接口,这个时候我们就需要给他们提供一份详细的API说明文档。这篇文章我们就来分享一种API文档维护的方式,即通过Swagger来自动生成Restuful API文档
    2018-01-01
  • WebService的相关概念

    WebService的相关概念

    这篇文章主要介绍了WebService的相关概念的相关资料,需要的朋友可以参考下
    2017-10-10
  • break和continue的作用和区别解析(案例分析)

    break和continue的作用和区别解析(案例分析)

    break和continue都是用来控制循环结构的,主要作用是停止循环,这篇文章主要介绍了break和continue的作用和区别,需要的朋友可以参考下
    2023-03-03
  • 深度源码解析Java 线程池的实现原理

    深度源码解析Java 线程池的实现原理

    如何高效的使用这些资源就是程序员在平时写代码时候的一个努力的方向。本文要说的线程池就是一种对 CPU 利用的优化手段。对Java 线程池的实现原理相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • Spring超详细讲解注解开发

    Spring超详细讲解注解开发

    Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势。本文将通过示例为大家详细讲讲Spring如何实现注解开发,感兴趣的可以学习一下
    2022-08-08

最新评论