2020年春の募集18 MyBatisのインタビューの質問を知っている必要があります

1.#{}と{} $であるとの違いは何ですか?

回答: それはあります P R インクルード P E R トン E S 文化 s q l {}のようなタグプロパティ値と内部SQL、静的テキスト置換、可能なプロパティファイルプレースホルダ変数であります {ドライバ}静的はcom.mysql.jdbc.Driverに置き換えられます。#{}は、パラメータプレースホルダ、MyBatisのか?番号を持つSQL#{}内の、パラメータ設定方法は、PreparedStatementのSQL SQLに順次実行?パラメータセット番号プレースホルダの前に使用されるであろうSQLですそのようなps.setIntオブジェクトパラメータ相当param.getItem()のgetName()から物体の反射値を取得した項目名の属性値を使用して(0、parameterValue)、#{} item.name方法。

2、XMLマッピング・ファイル、共通に加えて選択|挿入| updae |ラベルを削除するよりも、どのようなラベルを?

A:そこに多くの他のラベルがある,,,,,,プラス9つの動的SQLタグ、トリム| |セット| foreachの|選択| |場合|そう|バインドというように、タグによって、SQLフラグメントタグでありますSQL断片が導入され、ラベル生成戦略は、インクリメントの主キーをサポートしていません。

3は、ベストプラクティスは、通常、XMLマッピング・ファイルは、私が求めることができる、ダオに対応するインタフェースを記述します、インターフェイスの動作原理は、ダオは何かありますか?方法、パラメータのDAOインターフェイスが異なる、方法は、それをリロードすることができますか?

解答:ダオ・インターフェースは、しばしば言われているマッパーインターフェイスのインターフェイスの完全修飾名は、マップファイルの値の名前空間であり、インタフェースメソッド名は、IDマッピングファイルMappedStatement値であり、インターフェースメソッド内のパラメータが転送することですSQLのパラメータ。com.mybatis3.mappers.StudentDao.findStudentByIdは、一意の名前空間を見つけることができる:メソッド呼び出しインタフェース、インタフェース名+文字列連結キー値として完全に修飾されたメソッド名は、例えば、一意に配置MappedStatementかもしれない実装クラスインターフェースマッパー、 ID = findStudentById com.mybatis3.mappers.StudentDaoはMappedStatement未満です。MyBatisの中で、各,,,タグはMappedStatementオブジェクトに解決されます。

ポリシーを維持するために、完全修飾名+メソッド名を見つけることですので、インターフェイスメソッドでダオは、オーバーロードされていません。

DAOインターフェイスがJDKの動的プロキシはプロキシプロキシオブジェクトDAO JDK動的プロキシインタフェースの生成を実行MyBatisのに使用される動作であり、SQL MappedStatementの実装に有利な方法インターフェイスプロキシオブジェクトプロキシインターセプトは、SQL実行結果が返され、その後、表現しました。

4、MyBatisのどのページに至るまで?原則として改ページプラグインは何ですか?

:MyBatisのRowBoundsはあなたにもプラグインでページネーションを完了するために使用することができます物理的なページング機能を完了するために、SQLでの物理的なページングパラメータを直接書き込むことができ、それはむしろ物理ページより、実行のためのメモリページングのResultSet結果セットで、ページングを使用してオブジェクト物理ページ。

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

たとえば:インターセプトSQLに、学生を上書きSELECT * FROM:選択トンを*トン限度0,10(学生SELECT * FROM)から。

図5は、動作原理はMyBatisのプラグインを概説し、ならびにプラグインを作成する方法。

A:MyBatisのが唯一のこれら四つのプラグインインタフェース、機能をブロック達成するためのインターセプト・インタフェース・メソッドへのプロキシオブジェクト・インタフェース生成必要、4つのインターフェイスのたびに実施するためMyBatisの使用JDKの動的プロキシのParameterHandler、ResultSetHandler、StatementHandler、執行のために書かれますオブジェクトのメソッドは、インターセプト法に入りますと、コンクリートはのInvocationHandlerのinvoke()メソッドで、もちろん、あなただけは傍受を指定し、それらをインターセプトする必要があります。

インターセプタインターフェースと複製インターセプト()メソッドを達成し、その後、プラグインにメモを書くインターセプトするメソッドに、覚えているインターフェイスを指定MyBatisの、コンフィギュレーション・ファイルのプラグインで、あなたの設定を記述することを忘れないでください。

6、MyBatisのは、一括挿入を実行し、データベースの主キーのリストを返すことができますか?

A:確かにはい、JDBCことができ、MyBatisのことができます。

7、MyBatisのダイナミックSQLが何をしているのですか?動的SQLは何ですか?動的SQLの実行の缶簡単に原理はないですか?

A:MyBatisのダイナミックのSQLは、XMLマッピングファイル、ラベル、完全なロジックおよび動的なスプライシングSQL関数、MyBatisの申し出9つの動的SQLタグトリムの形で書き込み、動的SQLで私たちを聞かせすることができます| |セット| foreachの| |の場合とき| |そう|バインドを選択します。

その実行の原理、動的SQL関数を完了するために、動的スプライシングSQL式の値に応じて、OGNL SQLパラメータオブジェクトを使用して、式から算出される値。

図8は、MyBatisのは、SQLパッケージを実行する方法であるターゲットオブジェクトとリターンの結果ですか?マッピングの形式は何ですか?

A:最初の列名およびオブジェクトのプロパティの名前との間のマッピングを定義する、ラベルを使用することです。第二の機能は、列エイリアス名は、例えばT_NAME AS NAMEなどのオブジェクトのプロパティとして書き込まれ、別名SQLカラムを使用することで、一般的なオブジェクトのプロパティは、小文字、名前であるが、列名はケース非感受性である、MyBatisのは、列名のケースを無視しますMyBatisのが正常に動作することができますようにスマートな発見、対応するオブジェクトのプロパティ名、あなたも、T_NAMEなどの名前を書くことができます。

あなたが名前や属性名、リフレクションを通じてオブジェクトを作成MyBatisの間の列マッピングを持っていたら、個別のオブジェクトとリターンのプロパティに割り当てられた使用の反射が、これらのプロパティは、マッピング関係を見つけることができない、割り当てを完了することができません。

9、MyBatisのは、一つにあなたの多くに1をリレーショナルクエリ1を実行することができますか?実装だけでなく、それらの違いは何ですか。

A:はいMyBatisのは一から一、多くの関連クエリに1を実行できるだけでなく、あなたはまた、多対多のリレーショナルクエリを実行することができ、多くの対クエリ、クエリは実際には1つ上の一つであり、selectOne(ちょうど必要性)SelectListのように変更()とすることができる。多くの問い合わせに多く、実際には、多くのクエリ、ちょうど必要selectOne()であることができる)(SelectListのように変更します。

二つの方法で実現クエリ関連の目的は、一つのオブジェクトがマスタに割り当てられている、SQL関連するオブジェクトへの単一のクエリを送信し、その後、主被写体に戻ります。別のネストされたクエリを使用することで、意味はネストされたクエリの使用は、クエリに参加する場合、列Aの部分は、オブジェクトの属性値であり、カラムの一部が物体Bに関連付けられた属性値であり、利点のみSQLクエリを作られ、それはすることができ第一の目的とそれに関連するオブジェクトが判明しました。

そこで問題は、代わりに100の、主なターゲットは5であるかを決定する方法を、100件のレコードをチェックしてください参加するのですか?タグ内の子タグである重複排除原理は、レコードを決定するために、ユニークなID列が割り当てられ、MyBatisのは、意味論の主キーを表し、複数存在することができる重複排除機能100件のレコード列の値を達成します。

また通常の状況下で、唯一の主要目標は、レコードを複製するが、この原理によれば、主被写体で繰り返される関連する、一般的に関連するオブジェクトは繰返しません。

例:以下は、外クエリレコードに参加6、一つは二教師代わり6人の教師学生6の、教師、生徒6の結果としてMyBatisの重複排除処理後のオブジェクト列、学生オブジェクトとして3列です。

   t_id    t_name           s_id

| 1 | 教師| 38 |

| 1 | 教師| 39 |

| 1 | 教師| 40 |

| 1 | 教師| 41 |

| 1 | 教師| 42 |

| 1 | 教師| 43 |

10、MyBatisのは、遅延ロードをサポートしていますか?もしそうなら、その原理は達成するためには何かありますか?

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

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

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

11、XMLマッピング・ファイル、別のXMLマッピング・ファイル、IDのMyBatisのあなたは繰り返すことができますか?

:すべての名前空間が必要とされていない後、しかし、ベストプラクティス、それ;構成された名前空間が存在しない場合は、idが繰り返すことはできません別のXMLマッピングファイルには、コンフィギュレーションの名前空間場合は、IDを繰り返すことができます。

名前空間が存在しないかのような理由は、その名前空間+ idが、その後、idは互いに上書き重複したデータにつながる、キーを使用して、ID地図<文字列、MappedStatement>を残して、です。名前空間では、自然のidは、異なる名前空間、名前空間+自然に異なるIDを繰り返すことができます。

バッチ処理を実行するための方法12、MyBatisの?

A:使用バッチ処理完了したバッチ。

13、MyBatisのエグゼキュータは何ですか?それらの違いは何ですか?

A:MyBatisのは、SimpleExecutor、ReuseExecutor、バッチ処理の基本的な3つのエグゼキュータがあります。

SimpleExecutor:たびに更新または選択し、ちょうどすぐにクローズされたStatementオブジェクトを実行して、Statementオブジェクトを開きます。

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

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

スコープ:これらの機能の執行が厳しくスコープSQLSESSIONのライフサイクルに制限されています。

14、MyBatisのは、エグゼキュータエグゼキュータを使用するかを指定する方法?

:MyBatisの設定ファイルは、あなたが手動でDefaultSqlSessionFactoryの型パラメータのExecutorType SQLSESSIONを転送する方法を作成することができ、デフォルトExecutorTypeアクチュエータのタイプを指定することができます。

15、MyBatisのか列挙型は、列挙クラスをマッピングすることができますか?

:MyBatisの列挙クラスをマッピングすることができるだけでなく、列挙クラスをマッピングすることができ、MyBatisのテーブル上の任意のオブジェクトにマッピングすることができます。カスタム・マッピング・モードTypeHandler、setParameterをTypeHandler()とのgetResult()インターフェイスメソッドを達成します。TypeHandlerは2つの機能を有し、一方はJavaTypeがjdbcTypeの変換を完了することであるjdbcTypeのJavaType変換方法には、2つの完了したプレースホルダパラメータセットのSQL疑問符を表す、setParameterを2つ()とのgetResult()を反射し、カラムを得ますクエリ結果。

16、MyBatisのマッピングファイル、Bは、私は、求めることができる私は、ラベルAの後ろにBのラベルを定義することができ、またはことを、ラベルを含めるの内容を参照することにより、Aラベルは、Aは、前のラベルで定義する必要がありますか?

:MyBatisのは順番に解析されるXMLマップファイルを解析するが、しかし、BのラベルはまだMyBatisのが正しく識別することができ、任意の場所に定義することができます参照されています。

原理は、MyBatisのAラベルの解析で、参照は、Bは、ラベル・タグを見つけましたが、タグがBに解決されていない、A-ラベルはMyBatisのは、未解決の意志ラベル、この時点では、まだ存在していない、とBを含む、ラベルの残りの部分を解析しますラベル、解決すべきすべてのラベルが完了すると、MyBatisのは再レンダリングそれが正常に行われたラベルを解決することができ、未解決のタグとマークされている、その後、再解析する時間ラベルA、Bタグがすでに存在しています、。

17、MyBatisのXMLマッピングファイルとMyBatisの内部データ構造の簡単な間のマッピング?

:MyBatisののXmlすべての構成情報は、内部のオールインワン構成のヘビー級のオブジェクトにカプセル化されます。XMLマッピングファイルでは、タグは、その子要素のそれぞれはParameterMappingオブジェクトとして解析されたParameterMapオブジェクトとして解析されます。このresultMapラベルがオブジェクトに解析され、各サブ要素は、オブジェクトをResultMappingとして解析されるであろう。それぞれが,,,タグはMappedStatementオブジェクトとして解析され、タグ内のSQLはBoundSqlオブジェクトとして解析されます。

18、なぜMyBatisの半自動ORMマッピングツール?自動でどこが異なるのですか?

答え:それは完全に自動化されてHibernateのORMは、完全に自動マッピングツールである、Hibernateのクエリ関連するオブジェクトまたはコレクションオブジェクトの使用は、直接、オブジェクトリレーショナルモデルに基づいて求めることができます。完了するために手動で書き込みSQLへの必要性に関連したオブジェクトの関連するオブジェクトまたはコレクションを照会する場合やMyBatisのため、半自動ORMマッピングツールと呼ばれます。

フェイスの質問は非常に単純なように見えるが、それを正しく答えることができるようにしたいことがあり、それは徹底的に研究し、人々に関連するすべての顔の質問と回答の上、精通使用するかだけでなく、人々のソースする必要があります原則的に私のブログシリーズMyBatisの中の含有量は、詳細な説明と分析しています。

公開された78元の記事 ウォンの賞賛9 ビュー6188

おすすめ

転載: blog.csdn.net/WANXT1024/article/details/104402110