MyBatisの共通のインタビューの質問

MyBatisの - インタビューの質問


システムについて学ぶために最近の準備ができてMyBatisの、次の選挙前だけザッと読む10件の一般的な面接の質問

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

#{}是预编译处理,${}是字符串替换。
MyBatisの#{}を処理する場合、PreparedStatementの;?の呼設定割り当て方法でSQL番号#{}になり
、処理中にMyBatisの、{}変数に値を置き換えることです。
効果的に、SQLインジェクションを防ぐシステムのセキュリティを向上させることができる。#{}を使用します。

###### 2.Daoインターフェースの動作原理とは何ですか?方法、パラメータのDAOインターフェイスが異なる、方法は、それをリロードすることができますか?

DAOインターフェイスは、インターフェイスのマッパーインタフェースの完全修飾名は、マップ・ファイル値の名前空間であり、インタフェースメソッド名がMappedStatement値は、インターフェースメソッド内のパラメータは、SQLに渡されるIDマッピングファイルであることを特徴とすることが多いですパラメータ。メソッド呼び出しインタフェース、インタフェース名+文字列連結キー値として完全に修飾されたメソッド名は、例えば、一意に配置MappedStatementであってもよい場合マッパーは、実装クラスのインターフェイスではない:com.mybatis3.mappers.StudentDao.findStudentByIdは、一意の名前空間を見つけることができますID = findStudentById com.mybatis3.mappers.StudentDaoはMappedStatement未満です。MyBatisの中で、各<select>、<insert>、<update>、<delete>タグはMappedStatementオブジェクトに解決されます。
ポリシーを維持するために、完全修飾名+メソッド名を見つけることですので、インターフェイスメソッドでダオは、オーバーロードされていません。
DAOインターフェイスがJDKダイナミックプロキシが示されるSQL MappedStatementの実装に有利なプロキシオブジェクトプロキシインターセプト・インタフェース・メソッド、JDKの動的プロキシ・インタフェース生成DAOプロキシプロキシオブジェクトを実行MyBatisのに使用される動作であり、次に、SQL実行結果が返されます。

3. MyBatisのページングがどのように?原則として改ページプラグインは何ですか?

ページングResultSetの実行結果のために設定されているページング、はなく、物理ページを使用してMyBatisのRowBoundsオブジェクトが直接物理ページ内の物理ページのパラメータで記述することができる達成されるSQL関数は、物理ページのタブウィジェットを完了するために使用することができます。
基本原理は、提供されるプラグインタブMyBatisのプラグインインターフェイスを使用するカスタム・プラグインを達成するために、挿入方法内で実行されるSQL切片傍受し、SQLを書き換え、方言方言に従って、物理ページング・パラメータに対応する文と、物理ページを追加です。

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

最初は使用することです タグ、列名およびオブジェクトのプロパティの名前との間のマッピングを定義します。第二の機能は、カラムのエイリアス名を名前などT_NAMEとしてオブジェクトのプロパティとして書かれているエイリアスのSQLカラムを使用することで、一般的なオブジェクトプロパティの名前、小文字であるが、列名は大文字と小文字が区別され、MyBatisの列名の場合は無視され、 MyBatisのが正常に動作することができますようにスマートに、あなたも名としてT_NAMEを書くことができ、対応するオブジェクトのプロパティ名を検索します。
あなたが名前の間の列マッピングを持ち、属性名たら、MyBatisのは、個別のオブジェクトとリターンのプロパティに割り当てられた反射、使用リフレクションを通じてオブジェクトを作成し、これらのプロパティは、マッピング関係を見つけることができない、割り当てを完了することができません。

5. XMLマッピングファイルは、一般的な選択に加えて|挿入|更新|外のラベルを削除し、どのようなラベル?

注意:この質問はJingdongはインタビュアーから来ています。
設定| |どこが| foreachのそこに多くの他のラベルがあり、プラス9個の動的SQLタグ、トリムを選択| |があれば|そうでない| |バインドする場合、SQLフラグメントによって導入されたSQLフラグメントタグ、ラベルであるようにとは、サポートされていません。自動インクリメントの主キー生成方法のラベル。

6.動作原理は、プラグインを作成する方法と同様に、MyBatisのプラグインを概説します

MyBatisのは4つのだけのプラグインインタフェースのParameterHandler、ResultSetHandler、StatementHandler、執行のために書くことができ、MyBatisの関数インターセプトインタフェース生成インターフェイスプロキシオブジェクトのメソッドは、4つのインタフェースオブジェクトのたびに実装を実装する必要がインターセプトするJDKダイナミックプロキシを使用しますこの方法は、インターセプト法に入りますと、コンクリートはInvocationHandlerです呼び出す()メソッドで、もちろん、あなただけが傍受を指定し、それらをインターセプトする必要があります。MyBatisのはインターセプタインターフェースと複製インターセプト()メソッドを達成した後、プラグインにメモを書く、あなたはまた、設定ファイルに記述されたプラグインを設定する必要があることを覚えて、どのインタフェース傍受するためにどの方法を指定します。

7. L1およびL2キャッシュ

1)キャッシュ:フラッシュまたはクローズした後、セッション、セッションの範囲を格納PerpetualCacheローカルキャッシュを、ベースHashMapのは、キャッシュのすべてのセッションにクリアされます。
2)二次キャッシュとは、同じメカニズムをキャッシュするだけでなく)デフォルトPerpetualCache、HashMapのは、それは、マッパー(名前空間などの異なるスコープに格納され、格納された使用、及びそのようなEhcacheのようなカスタム貯蔵源であってもよいです。二次キャッシュを有効にするには、お使いのSQLマッピングファイルに1行を追加する必要があります。
3)データキャッシュ更新メカニズムのため、デフォルトの後(一定の範囲内のキャッシュセッション/二次キャッシュ名前空間)をC / U / D動作を行う際には明らかであろうすべてのキャッシュの範囲を選択します。

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

MyBatisの協会が唯一の関連付けが1を参照し、関連するオブジェクトのコレクションと関連オブジェクトのコレクションを遅延ロードをサポートし、コレクションには、多くのクエリを指します。偽| MyBatisの設定ファイルでは、あなたは=真lazyLoadingEnabled遅延読み込みを有効にするかどうかを設定することができます。
その原理)、コールa.getBとしてインターセプタメソッドを、(入力した場合にターゲットメソッド呼び出し対象オブジェクトのプロキシオブジェクトを作成するCGLIBを使用することである。関連項目GetName()、インターセプタのinvoke()メソッドは、(a.getBを発見した)でありますヌル値は、それが事前SQL関連オブジェクトBに送信された保存されたクエリを分離する、クエリアップBは、次いで、(b)は、ターゲット属性値bが存在するa.setBを呼び出し、その後a.getBを完了( ).getName()メソッドを呼び出します。これは、基本的な原理遅延ロードです。

9. MyBatisのマッピングファイルBの内容を参照することにより、ラベルはラベルが含まれている場合、私が求めることができる、私はラベルAの後ろにBのラベルを定義するか、またはAは、前のラベルで定義されなければならないことはできますか?

MyBatisのXML解析マップファイルを順に解析されているが、しかし、Bのラベルがまだ参照されている任意の場所に定義することができ、MyBatisのは、正確に識別することができます。
で、ラベルの解析をMyBatisの、参照がBがlabelタグを見つけましたが、タグがBに解決されていない、まだ存在しない原則は、この時点では、ラベルが未解決MyBatisの、およびBを含む、ラベルの残りの部分を解析しますラベルラベル、解決すべきすべてのラベルが完了すると、MyBatisの再レンダリング未解決のタグとマークされている、その後、再解析する時間ラベルA、Bタグがすでに存在している、それが正常に行われたラベルを解決することができます。

MyBatisのMyBatisのXMLマッピングファイルおよび内部データ構造との間のマッピング関係の説明10?

XMLは、すべての構成情報が内部のオールインワン構成のヘビー級のオブジェクトにカプセル化されMyBatisの。XMLマッピングファイルで、 たParameterMapラベルがオブジェクトに解析され、各サブエレメントはParameterMappingオブジェクトとして解析されます。 このresultMapラベルがオブジェクトに解析され、各サブエレメントはResultMappingオブジェクトとして解析されます。 <select>、<insert>、<update>、<delete> タグはMappedStatementオブジェクトとして解析され、タグ内のSQLはBoundSqlオブジェクトとして解析されます。

参考:https://zhuanlan.zhihu.com/p/61432692

おすすめ

転載: www.cnblogs.com/QuixoteY/p/10926640.html