MyBatisで発行したSQLを確認する方法

MyBatisで発行したSQLを確認する方法

MyBatisで発行したSQLを確認

MyBatisで発行されるSQLを確認するためには、いくつかの方法があります。
以下に代表的な方法をいくつか紹介します。

1. ログ出力を利用する方法

MyBatisでは、設定ファイルにログ設定を追加することで、SQLのログを出力することができます。
具体的には、log4jやslf4jなどのロギングフレームワークと連携する方法が一般的です。

<configuration>
  <settings>
    <setting name="logImpl" value="SLF4J"/>
  </settings>
</configuration>

この設定を行うと、MyBatisは実行されたSQL文をSLF4J経由でログに出力します。
出力されたログは次のようになります。

DEBUG test.TestMapper - ==>  Preparing: SELECT * FROM test_table WHERE id = ?
DEBUG test.TestMapper - ==> Parameters: 1(Integer)
DEBUG test.TestMapper - <==    Updates: 1
2. MyBatis拡張機能を使用する方法

MyBatisの拡張機能を利用して、実行されるSQLを確認することも可能です。
Interceptorを使用してSQLをログに記録するカスタムインターセプターを作成する方法が考えられます。

以下は、Interceptorを利用してSQLをログに出力する例です。

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import java.sql.Connection;
import java.util.Properties;

@Intercepts({
    @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
})
public class SqlLoggingInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        StatementHandler handler = (StatementHandler) invocation.getTarget();
        System.out.println("Executing SQL: " + handler.getBoundSql().getSql());
        return invocation.proceed();
    }

    @Override
    public void setProperties(Properties properties) {
        // Optional: Load custom properties if needed
    }
}

このインターセプターをMyBatisの設定に追加することで、SQLが実行されるたびにコンソールに出力されます。

<plugins>
  <plugin interceptor="com.example.SqlLoggingInterceptor"/>
</plugins>
3. MyBatisのデバッグモードを利用する方法

デバッグモードを利用して、MyBatisが生成するSQL文を直接デバッグ時に確認することも可能です。
IDEを使用してブレークポイントを設定し、MyBatisが内部的に生成したSQL文やパラメータを調べる方法です。

まとめ

MyBatisで発行されるSQLを確認するには、ログ出力を設定する方法、カスタムインターセプターを利用する方法、デバッグモードを利用する方法などが有効です。
システムの規模や要件に応じて、最適な方法を選択するとよいでしょう。