Mybatis框架怎么查看执行的sql语句

一、操作步骤

1.打开idea搜索mybatis SimpleExecutor类

org.apache.ibatis.executor.SimpleExecutor

2.找到类中doQuery方法,并打断点

请添加图片描述

3.发请求后,查看boundSql

boundSql就是mybatis给我们封装好的,往数据库发的完整的sql语句。
请添加图片描述

二、其他办法

在使用 MyBatis 框架时,有时候我们需要查看实际执行的 SQL 语句以便调试或者优化查询。以下是几种查看 MyBatis 执行的 SQL 语句的方法:

1.日志输出

最直接的方法是配置 MyBatis 使用一个日志框架,并启用日志记录级别为 DEBUG 或 TRACE,这样就可以看到所有的 SQL 语句以及参数。

配置 Log4j
如果你使用的是 Log4j,可以在 log4j.properties 或 log4j.xml 文件中配置如下内容:

log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.logger.org.mybatis=DEBUG

如果你使用的是 SLF4J,则可以在 mybatis-config.xml 文件中指定日志实现为 SLF4J,并且在对应的 SLF4J 实现(如 logback.xml)中设置日志级别:

<!-- mybatis-config.xml -->
<settings>
    <setting name="logImpl" value="SLF4J"/>
</settings>

然后在 logback.xml 中设置日志级别:

<root level="debug">
    <appender-ref ref="STDOUT" />
</root>

2.使用 MyBatis 插件

MyBatis 提供了一个插件机制,允许开发者编写自己的拦截器来拦截 MyBatis 的核心执行流程。你可以编写一个简单的插件来拦截 Executor 的 update 或 query 方法,并打印 SQL 语句。

这里有一个简单的插件示例:

public class PrintSqlPlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Executor executor = (Executor) invocation.getTarget();
        if (invocation.getMethod().getName().equals("update") || invocation.getMethod().getName().equals("query")) {
            System.out.println("Executing SQL: " + ((BoundSql) invocation.getArgs()[2]).getSql());
        }
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
    }
}

然后在 mybatis-config.xml 中注册这个插件:

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

3.使用数据库客户端

大多数数据库管理工具(如 DBeaver, SQL Workbench, MySQL Workbench 等)都有日志记录功能,可以记录执行的 SQL 语句。你可以在客户端工具中开启 SQL 执行日志。

4.使用 AOP(面向切面编程)

如果你的应用程序使用了 Spring AOP,那么也可以通过定义一个切面来拦截 DAO 层的方法调用,并打印 SQL 语句。

以上方法中,配置日志框架可能是最简便的方法,因为不需要修改任何代码,只需要配置即可生效。但是需要注意的是,在生产环境中应该关闭 SQL 打印,因为它会产生大量的日志输出,影响系统性能。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值