コンテンツにスキップ

SQL分析と出力

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

p6spyの概要

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

p6spyはSQLログの記録に限定されず、以下のような高度な機能も提供します:

  • 遅い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
# 遅いSQLの記録を有効化
outagedetection=true
# 遅いSQLの記録基準(単位:秒)
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.12.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を削除してください。
  • バッチ操作での重複出力の問題については、MybatisPlusLogFactoryを使用してください(3.2.1で新規追加)。
  • このプラグインはパフォーマンスのオーバーヘッドをもたらす可能性があるため、本番環境での使用は推奨されません。

以上の手順により、開発プロセスでSQL文を簡単に分析および出力できるようになります。最適な使用効果を得るために、実際のニーズに応じて設定を調整してください。

Baomidou

© 2016-2025 Baomidou™. All Rights Reserved.

Power by Astro Starlight | Sponsored by JetBrains

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