コンテンツにスキップ

SQL分析と出力

MyBatis-Plus は SQL の解析および出力機能を提供しており、p6spy コンポーネントを統合することで、SQL 文とその実行時間を簡単に出力できます。この機能は MyBatis-Plus 3.1.0 以上のバージョンで使用可能です。

p6spyの概要

p6spy は、データベースアクセスをインターセプトして記録するツールで、JDBC ドライバーをプロキシすることで動作します。これは、アプリケーションが通常通り JDBC を使用できることを意味し、p6spy はバックグラウンドで全てのSQLステートメントとその実行時間を記録します。これは開発とデバッグプロセスにおけるSQL最適化に非常に役立ちます。

p6spy はSQLログの記録だけでなく、以下のような高度な機能も提供します:

  • スロークエリの検出outagedetectionoutagedetectioninterval を設定することで、p6spy は設定されたしきい値を超える実行時間を持つSQLステートメントを記録できます。
  • カスタムログフォーマットlogMessageFormat を使用して、タイムスタンプ、実行時間、SQLステートメントなどを含むSQLログの出力フォーマットをカスタマイズできます。
  • ログ出力の制御appender 設定により、ログをコンソール、ファイル、またはログシステムに出力するかを選択できます。

p6spy は強力なツールで、MyBatis-Plus ユーザーに便利なSQL分析と出力機能を提供します。適切に設定することで、開発とテスト段階で効果的にSQLステートメントを監視し最適化できます。ただし、パフォーマンスへの影響があるため、本番環境での使用は慎重に行うことをお勧めします。

サンプルプロジェクト

この機能の使用方法をより良く理解するために、公式のサンプルプロジェクトを参照できます:

依存関係の追加

まず、プロジェクトに p6spy の依存関係を追加する必要があります。以下は Maven と Gradle の2つのビルドツールでの追加方法です:

<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>

設定

次に、application.yml または application.properties で適切な設定を行う必要があります。

application.yml

spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:h2:mem:test
# その他のデータベース設定...

spy.properties

p6spy の設定ファイル spy.properties には複数の設定項目が含まれており、以下は主要な設定の例です:

# モジュールリスト。バージョンに応じて適切な設定を選択
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# カスタムログフォーマット
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
# ログをコンソールに出力
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# JDBC ドライバーの登録を解除
deregisterdrivers=true
# プレフィックスを使用
useprefix=true
# 除外するログカテゴリ
excludecategories=info,debug,result,commit,resultset
# 日付フォーマット
dateformat=yyyy-MM-dd HH:mm:ss
# 実際のドライバーリスト
# driverlist=org.h2.Driver
# スロークエリの記録を有効化
outagedetection=true
# スロークエリの記録基準(単位:秒)
outagedetectioninterval=2
# flw_ で始まるテーブルのSQL出力をフィルタリング
filter=true
exclude=flw_*

Spring Boot 統合

Spring Boot プロジェクトでは、p6spy-spring-boot-starter を使用して統合プロセスを簡素化できます。

依存関係

<dependency>
<groupId>com.github.gavlyukovskiy</groupId>
<artifactId>p6spy-spring-boot-starter</artifactId>
<version>1.11.0</version>
</dependency>

設定

decorator:
datasource:
p6spy:
# ログフォーマット
log-format: "\ntime:%(executionTime) || sql:%(sql)\n"
# カスタムログクラス
logging: custom
custom-appender-class: com.example.testinit.config.StdoutLogger
public class StdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger {
public void logText(String text) {
System.err.println(text);
}
}

p6spy-spring-boot-starter の設定に関する詳細情報については、GitHubを参照してください。

注意事項

  • driver-class-namep6spy が提供するドライバークラスに設定する必要があります。
  • url のプレフィックスは jdbc:p6spy とし、その後に実際のデータベース接続アドレスを続けます。
  • 出力されるSQLが null の場合は、excludecategoriescommit を追加してください。
  • バッチ操作でSQLが出力されない場合は、excludecategories から batch を削除してください。
  • バッチ操作でSQLが重複して出力される問題については、MybatisPlusLogFactory を使用してください(3.2.1で追加)。
  • このプラグインはパフォーマンスに影響を与える可能性があるため、本番環境での使用は推奨されません。

上記の手順に従うことで、開発プロセスでSQLステートメントを簡単に分析し出力することができます。実際のニーズに応じて設定を調整し、最適な使用効果を得ることを忘れないでください。

Baomidou

© 2016-2025 Baomidou™. All Rights Reserved.

Power by Astro Starlight | Sponsored by JetBrains

渝ICP备2021000141号-1 | 渝公网安备50011302222097