MyBatisフレームワークの5つのデザインパターンのまとめ

序文

MyBatis フレームワークで使用される 5 つのデザイン パターンは次のとおりです:1. ビルダー モード (ジェネレーター モード)。 2. 工場出荷時モード。 3. シングルトンモード。 4. エージェントモード。 5. アダプターモード。

1. ビルダーモード(ジェネレーターモード)

MyBatis 環境の初期化プロセス中に、SqlSessionFactoryBuilder は XMLConfigBuilderread を呼び出します。

すべてMyBatisMapConfig.xml およびすべて ファイル、MyBatis 操作のコア オブジェクトを構築します *Mapper.xml

Configuration オブジェクトを取得し、Configuration オブジェクトをパラメータとして使用して SqlSessionFactory ペア を構築します。

象。

2. ファクトリーモード

  • たとえば、MyBatis では SqlSessionFactory ファクトリ パターンが使用されています。ファクトリにはそれほど複雑なロジックはなく、 シンプルなファクトリ パターンです。

  • SqlSessionMyBatis の作業の中核インターフェイスと見なすことができます。このインターフェイスを通じて、 SQL ステートメント、マッパーの取得、トランザクションの管理。 MySQL に接続する オブジェクトと似ています。 Connection

3. シングルトンモード

  • MyBatis ではシングルトン モードが 2 か所、ErrorContextLogFactory で使用されます。そのうち ErrorContextこれは、各スレッドのスコープ内でスレッドの実行環境エラー情報を記録するために使用されるシングルトンであり、 は、プロジェクトに設定されたログ オブジェクトを取得するために使用されます。 LogFactory は、MyBatis 全体に提供されるログ ファクトリーです。

 public class ErrorContext {
     /**
      * 每个线程各自的数据
      */
     private static final ThreadLocal<ErrorContext> LOCAL = new ThreadLocal<>();
 ​
     private ErrorContext() {
     }
 ​
     public static ErrorContext instance() {
         ErrorContext context = LOCAL.get();
         if (context == null) {
             context = new ErrorContext();
             LOCAL.set(context);
         }
         return context;
     }
 ​
 }
  • コンストラクターはプライベートに変更され、静的なローカル インスタンス変数とインスタンス変数を取得するメソッドが用意されています。インスタンスを取得するメソッドでは、まず空かどうかを判断し、空の場合は最初に作成し、構築されたオブジェクトを返します。 。

  • ここで唯一興味深いのは、LOCAL の静的インスタンス変数が ThreadLocal で変更されていることです。これは、 が各スレッドに属していることを意味します。データを取得し、 instance() メソッドで、まずこのスレッドのインスタンスを取得します。取得できない場合は、スレッドの一意の ErrorContext を作成します。

4. エージェントモード

プロキシ モードは、MyBatis のコアで使用されるモードと考えることができます。このモードがあるからこそ、 Mapper.javaインターフェイス

5.アダプターモード

  • MyBatis ロギング パッケージには、Log インターフェイスがあります。

    このインターフェイスは、MyBatis によって直接使用されるロギング メソッドを定義します。具体的に Log インターフェイスを実装するのは誰ですか?

  • MyBatis はさまざまなログ フレームワーク実装を提供します。これらの実装はすべて、この Log インターフェイスで定義されたインターフェイス メソッドと一致します。最終的に すべての外部ログ フレームワークの MyBatis ログ パッケージへの適応を実装します。

おすすめ

転載: blog.csdn.net/qq_30713721/article/details/134904721