在 MyBatis 中实现控制台输出 SQL 参数

发布于:2025-05-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

在 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。


网站公告

今日签到

点亮在社区的每一天
去签到