Javaの最も一般的な面接の質問:モジュール13

サーティーン、MyBatisの

#{}と{} $の違い125 MyBatisのでは何ですか?

  • #{}は、プリコンパイラのプロセスであり、置換文字列は、$ {}です。

  • MyBatisの#{}を処理するとき、?;呼び出しセット割当方法のPreparedStatementとSQL番号#{}になります

  • MyBatisの$ {}を処理するときに、{} $は、変数の値を置き換えることです。

  • 効果的に、SQLインジェクションを防ぐシステムのセキュリティを向上させることができる。#{}を使用します。

 

126は、いくつかの方法の改ページがありますMyBatisの?

  1. アレイページ

  2. SQLのページネーション

  3. インターセプタのページ

  4. RowBoundsページ

 

違い128 MyBatisの論理ページと物理ページであるとは何ですか?

  • スピードは、物理ページは、論理ページは、必ずしも物理ページより速く加速されていない論理ページよりも高速である必要はありません。

  • 常に優れた物理ページの論理ページ:データベースは、スピードの利点があっても、最後までアプリケーション端に課せられた圧力に属する必要はありませんが、十分な他の性能の利点は、それを補うために。

 

129 MyBatisのは、遅延ロードをサポートしていますか?遅延ロードの原則とは何ですか?

MyBatisの協会が唯一の関連付けが1を参照し、関連するオブジェクトのコレクションと関連オブジェクトのコレクションを遅延ロードをサポートし、コレクションには、多くのクエリを指します。偽| MyBatisの設定ファイルでは、あなたは=真lazyLoadingEnabled遅延読み込みを有効にするかどうかを設定することができます。

 

その原理)、コールa.getBとしてインターセプタメソッドを、(入力した場合にターゲットメソッド呼び出し対象オブジェクトのプロキシオブジェクトを作成するCGLIBを使用することである。関連項目GetName()、インターセプタのinvoke()メソッドは、(a.getBを発見した)でありますヌル値は、それが事前SQL関連オブジェクトBに送信された保存されたクエリを分離する、クエリアップBは、次いで、(b)は、ターゲット属性値bが存在するa.setBを呼び出し、その後a.getBを完了( ).getName()メソッドを呼び出します。これは、基本的な原理遅延ロードです。

 

もちろん、ほとんどすべてのHibernateのを含め、MyBatisの、だけではなく、原則のための遅延ロードのサポートは同じです。

 

130 MyBatisのはキャッシュと二次キャッシュについて話しますか?

 

キャッシュ:HashMapのもとPerpetualCacheローカルキャッシュ、フラッシュまたはクローズした後、セッション、セッションの範囲を格納し、キャッシュの全ては、デフォルトのキャッシュによって、セッションに空になります。

 

ハッシュマップが記憶されていると同じメカニズムをキャッシュするだけでなく、デフォルトPerpetualCacheを用いた二次キャッシュは、それがマッパー(名前空間)などの異なるスコープに格納され、そしてそのようなEhcacheのようなカスタム貯蔵源であってもよいです。既定の二次キャッシュ、二次キャッシュを開くために、開放されていない、(オブジェクトの状態を保存するために使用される)シリアライズクラスシリアライゼーションインタフェースを実装するのに必要なプロパティを使用して二次キャッシュは、それがマッピングファイルに配置することができる<キャッシュ/>。

 

後に特定の範囲のC / U / D処理(キャッシュセッション/二次キャッシュ名前空間)を行う場合、データの更新メカニズムをキャッシュするため、選択デフォルトのキャッシュ・スコープこのすべては明らかであろう。

 

131 MyBatisのと休止状態の違いは何ですか?

 

MyBatisのは、自分のSQL文を書くためにプログラマーを必要とするので、異なる(1)MyBatisのと休止状態、それは、正確にORMフレームワークではありません。

 

(2)MyBatisのは、元の生態SQLに直接書き込む、SQLの実行を厳密に制御することができる性能、高い柔軟性、ソフトウェア開発、なぜなら需要の頻繁な変更のようなソフトウェアのリレーショナル・データ・モデルにはあま​​り要求のための理想的な、しかし迅速な達成の出力を求め変更を要求します。しかし、ソフトウェアを実装する必要が複数のデータベースをサポートしている場合、その柔軟性は、データベースに依存しないMyBatisの前提に行うことができない、カスタムマップファイルは、SQL重いワークロードを設定する必要があります。 

 

(3)強力なオブジェクト/リレーショナルマッピング機能を休止状態休止状態、開発者はコードを大幅に節約し、効率を向上させることができれば、高リレーショナルモデルは、ソフトウェアを必要とするために、データベースに依存しないで良いです。 

 

どのようなアクチュエータ(エグゼキュータ)が132 MyBatisの?

 

三つの基本的なMyBatisのアクチュエータ(エグゼキュータ)があります。

 

  1. SimpleExecutor:たびに更新または選択は、単に、Statementオブジェクトを開き、すぐに閉じられたStatementオブジェクトを実行します。

  2. ReuseExecutor:アップデートを実行するかを選択し、SQL Statementオブジェクトを見つけるための鍵は、使用上に存在するとして、それが作成するために存在していない、使用後に、Statementオブジェクトをクローズしませんが、次回の使用のために、マップに配置。短い、再利用Statementオブジェクトで。

  3. バッチ処理:(JDBCバッチが選択をサポートしていませんが、選択しない)更新を実行し、すべてのSQLを均一な実装(のexecuteBatch())を待って、バッチ(addBatch())に追加され、それはそれぞれ、複数のStatementオブジェクトをキャッシュStatementオブジェクトは、1がexecuteBatch()バッチによる実行の1を待って、完成後addBatch()です。そして、JDBC同じバッチ。

 

原則133 MyBatisのページ付けプラグインとは何ですか?

 

基本原理は、提供されるプラグインタブMyBatisのプラグインインターフェイスを使用するカスタム・プラグインを達成するために、挿入方法内で実行されるSQL切片傍受し、SQLを書き換え、方言方言に従って、物理ページング・パラメータに対応する文と、物理ページを追加です。

 

134は、カスタムプラグインを作成する方法をMyBatisの?

 

MyBatisの4つのオブジェクト(エグゼキュータ、StatementHandler、ParameterHandler、ResultSetHandler)、特定のインターセプト方法を傍受するMyBatisのカスタムプラグイン: 

  • エグゼキュータ:メソッドインターセプタアクチュエータ(ログレコード) 

  • StatementHandler:迎撃SQLの文法構築プロセス 

  • ParameterHandler:インターセプション処理パラメータ 

  • インターセプト処理の結果セット:ResultSetHandler 

 

MyBatisのカスタムプラグインでは、インターセプタを実装する必要があります。

パブリック インターフェースインターセプタ{ 
    オブジェクトインターセプト(呼び出しの呼び出し)がスローのThrowable。
    オブジェクトプラグイン(オブジェクト・ターゲット)
    のsetProperties(プロパティのプロパティ)。
}

 

インターセプト方法ロジックのインターセプタ具体的な処理方法 

プラグイン方法:動的プロキシオブジェクトsignatureMap署名生成 

setProperties:プロパティの設定プロパティ

カスタムプラグインのデモ:

// ExamplePlugin.java 
@Intercepts({署名@(
  タイプ =執行。クラス
  メソッド = "更新" 
  引数 = {MappedStatement。クラス、オブジェクト。クラス})})
 パブリック クラス ExamplePluginが実装インターセプタ{
   パブリックオブジェクトインターセプト(呼び出しの呼び出しを)スローのThrowable { 
  オブジェクト目標 = invocation.getTarget()。// 被代理对象 
  メソッドのメソッド= invocation.getMethod()。// 代理方法の 
  オブジェクト[]引数の=のinvocation.getArgs()。//メソッドパラメータ
   // ...コードのブロックの前に何かをインターセプト法 
  オブジェクト結果= invocation.proceed();
   //は、後に何かを.......ノックダウンするコードメソッドのブロック
  リターン結果を; 
  } 
  パブリックオブジェクトプラグイン(オブジェクト・ターゲット){
     返す(ターゲットPlugin.wrapをこの); 
  } 
  公共 ボイドのsetProperties(プロパティプロパティ){ 
  } 
}

 

シグニチャパラメータが定義されている@次のような構成の複数の署名@ @Interceptsができます。 

  • タイプ:クラスは、ここでは、傍受を表しExecutorの実装クラスです。

  • 方法:インターセプト表現は、ここではインターセプトExecutorの更新方法です。

  • 引数:表現パラメータ。

 

(終わり)

おすすめ

転載: www.cnblogs.com/xiaofengwang/p/11257378.html