2019 mybatils高周波インタビューの質問(javaの)

はじめに前

私たちは、新しい年の到来を告げるしようとしていると2019年にはすぐに、オーバーになり、春祭り、再び到来を告げる新しいインタビューの金と銀の3四季インチ その後、手で物事を行うに引き続き、あなたは類人猿のプログラムとして、実際にも、それのために準備すること、または自分の仕事に満足。

もちろん、あなたがJavaエンジニアとして、その後、金や銀3 4後に終了して本当に準備ができている場合は、選択したどんなには読まれないことがあります。どのように数ヶ月の時間で、急速適切今後の面接の準備をしますか?

まず、MyBatisのは何ですか?

A:MyBatisのは、永続化フレームワーク缶カスタムSQL、ストアドプロシージャと高度なマッピングです。

キャッシュMyBatisの下に言えば第二に、

:キャッシュと二次キャッシュにMyBatisのキャッシュは、内部のキャッシュセッションは、その二次キャッシュの名前空間上のデフォルトがあり、デフォルトが開いていない、二次キャッシュ属性クラスのニーズを使用器具(オブジェクトの状態を保存するために使用される)シリアライズ直列化インターフェースは、マッピング・ファイル上に配置することができます

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


1は、MyBatisの使用RowBoundsは、ページオブジェクト、あなたも書き込みに直接SQLのページングを実装することができ、あなたはまた、MyBatisのプラグインページネーションを使用することができます。
図2は、原則として改ページプラグイン:MyBatisのが設けられたインタフェースの実装は、カスタムプラグイン切片SQL、インターセプト法プラグイン内で実行されることを実現し、SQLを書き換えます。
たとえば:インターセプトSQLに、学生を上書きSELECT * FROM:選択トンを*(*選択からトン限度0,10学生から)。

第四に、動作原理はMyBatisのプラグインを概説と同様に、プラグインを作成する方法?

A:
1、MyBatisのが唯一の機能をブロック達成するためのインターセプト・インタフェース・メソッドへのプロキシオブジェクト・インタフェース生成必要、4つのインターフェイスのたびに実施するための動的プロキシを介してParameterHandler、ResultSetHandler、StatementHandler、これら4つのインターフェイスの執行、MyBatisのためのプラグインを作成することができオブジェクトのメソッドは、インターセプト法に入りますと、コンクリートはのInvocationHandlerのinvoke()メソッドで、もちろん、あなただけは傍受を指定し、それらをインターセプトする必要があります。
2は、覚えて、切片へのインターフェースにメソッドを指定し、プラグインにMyBatisのにインターセプタインターフェースと複製インターセプト()メソッド、および、書き込みノートを達成するために、コンフィギュレーション・ファイルのプラグインで、あなたの設定を記述することを忘れないでください。

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


1は、MyBatisのダイナミックSQLがロジックおよび動的SQLステッチ機能を完了するために、動的SQLタグの形式で書かれた、XMLマッピングファイルで私たちを聞かせすることができます。
2、MyBatisのの提供9個のダイナミックSQLタグ:トリム| |セット| foreachのを | | |選択|そうでない場合|バインド。
図3に示すように、その実行の原理、動的SQL関数を完了するために、動的スプライシングSQL式の値に応じて、OGNL SQLパラメータオブジェクトを使用して、式から算出される値。

第六に、#{}と{} $であるとの違いは何ですか?

A:
1、#{}は、プリコンパイラ・プロセスであり、

不能识别此Latex公式:
{}是字符串替换。
2、Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
3、Mybatis在处理
場合は、{}、{} $は変数に値を交換することです。
4、#{}を使用すると、効果的にシステムのセキュリティを向上させる、SQLインジェクションを防止することができます。

 

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

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

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

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

ナイン、HibernateでMyBatisの違いは何ですか?


1は、異なるMyBatisのとはMyBatisのが自分のSQL文を書くためにプログラマーを必要とするので、それは、正確にORMフレームワークではありません、休止状態が、MyBatisのは柔軟にXMLまたは注釈、およびJavaオブジェクトとSQL文を経由して、SQLステートメントを実行するように設定することができますSQL最終マップ生成を行う、最終的な結果は、発生がSQL Javaオブジェクトを実行マップします。
2、MyBatisの低プログラマは、元の生態SQL、SQLの実行パフォーマンスを厳密に制御することが可能に直接書き込み、簡単に学ぶために、以下、このようなインターネットソフトウェア、エンタープライズクラスのオペレーティングソフトウェアなどのソフトウェア開発のリレーショナルデータモデル、上の要求のための、高い柔軟性、理想的に学習曲線など、そのようなソフトウェア要件は頻繁に変更はなく、出力の急激な変化のニーズが成果を必要とするので。しかし、その柔軟性はMyBatisのデータベースに依存しないが、ソフトウェアでは、SQLマッピングファイル、重いワークロードのセットをカスタマイズする必要がある場合は、複数のデータベースを実装する必要がサポートしていることを前提に行うことはできません。
データベースの独立した強い3、Hibernateのオブジェクト/リレーショナルマッピング機能は、高リレーショナルモデルに適していますが、Hibernateでコード開発を大幅に節約し、効率を向上させることができる場合(例えば、固定需要カスタマイズされたソフトウェアなど)のソフトウェアが必要です。しかし、休止状態の欠点は、パフォーマンスとオブジェクトモデル、およびどのように仕事に強力な経験と能力を持っているHibernateの必要性を十分に活用するとの間でバランスを取る方法を、高いしきい値、およびどのように設計O / Rマッピングを習得するために、学ぶために高い閾値です。
要するに、リソースが制限された設定で、ユーザーのニーズに応じて長期メンテナンスなどとすることができる、拡張性の優れたソフトウェアアーキテクチャは、優れたアーキテクチャは、それだけで、適切なフレームワークは最高ですです。

テンは、MyBatisの何が良いのですか?


1は、独立したXMLファイルに配置されたJavaソースコードのうちから別のSQL文は、メンテナンスプログラムに書き込まれMyBatisのは大きな利便性をもたらしています。
2は、MyBatisの大幅Javaデータベースの複製のプログラミングを簡素化し、基礎となるJDBC APIコールの詳細をカプセル化し、自動的にJava Beanがオブジェクトのセットに結果を変換することができます。
MyBatisのSQL文を書くことをプログラマを必要とするため、図3に示すように、データベースプログラマは、複雑なクエリを実行することができ、従って、このような休止状態、自動クエリORMフレームワークよりも効率的で有効に、SQL文の柔軟な制御の特性を組み合わせることができます。

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

答:Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。<resultMap>标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。每一个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

XII結合界面MyBatisのは何ですか、と利点は何ですか?

A:インターフェース・マップは、任意のMyBatisのにインターフェイスを定義することである、と我々は、より柔軟なオプションと設定を提供することができるように、インターフェースメソッドSQL文およびバインドの内部は、我々が直接元のメソッドSQLSESSIONに比べ、インタフェースメソッドを呼び出すことができ。

XIIIインタフェースがどのように達成するか、すなわち、いくつかの方法があります実現するためにバインドされていますか?

:インターフェイスは、次の2つの方法で実装バインディング、1はバインディングアノテーションを介して行われ、インターフェースをバインドするために、上記の方法でノートや他のSQL文が含まれている更新@選択@追加することで、別のは、XMLの内部でSQLを記述することですバインドに、この場合には、インタフェースのフルパス名でなければなりません名前空間内のXMLマッピングファイルを指定します。

第四には、どのような状況バインド注釈付きの下で、使用するXMLは、どのような状況の下で結合しますか?

A:注釈バインドを使用すると、SQL文が単純である場合には、通常、XMLを使用した、より複雑なSQL文XMLバインディングを使用して、より多くの結合時に。

フィフティーン、MyBatisの動作させるために具体的にどのように?1を達成するための方法はいくつかありますか?

A:関節のお問い合わせやネストされたクエリ、ユニオンクエリ複数のテーブル共同問い合わせ、クエリは1クラス内の関連ノード構成このresultMapを構成することによって完了することができますのみ、一度あります。ネストされたクエリは、select属性のクエリ構成によって、外部キーテーブルID内部の結果によれば、テーブルを確認し、さらにテーブルにデータクエリ内部だけでなく、関連構成ではなく、別のテーブルです。

シックスティーン、MyBatisのはあなたの多くの1つ、1へのリレーショナルクエリ1を実行することができますか?実装、およびそれらの間の違いは何ですか?

A:はいMyBatisのは一から一、多くの関連クエリに1を実行できるだけでなく、あなたはまた、多対多のリレーショナルクエリを実行することができ、多くの対クエリ、クエリは実際には1つ上の一つであり、selectOne(ちょうど必要性)SelectListのように変更()とすることができる。多くの問い合わせに多く、実際には、多くのクエリ、ちょうど必要selectOne()であることができる)(SelectListのように変更します。
二つの方法で実現クエリ関連の目的は、一つのオブジェクトがマスタに割り当てられている、SQL関連するオブジェクトへの単一のクエリを送信し、その後、主被写体に戻ります。別のネストされたクエリを使用することで、意味はネストされたクエリの使用は、クエリに参加する場合、列Aの部分は、オブジェクトの属性値であり、カラムの一部が物体Bに関連付けられた属性値であり、利点のみSQLクエリを作られ、それはすることができ第一の目的とそれに関連するオブジェクトが判明しました。

どのようにセットされXVIIの動的SQL MyBatisの?どのような構文?

A:MyBatisの動的な内部のノードがOGNLの構文によって実現されている場合、SQLは、一般的にによって実現されていますが、完全を書いた場合、どこで、トリムノード協力しなければならない、ノードは、それ以外の場合は、ノードがどこに挿入されて含まれている内容を決定することである挿入しないところ、トリムノードは、文が起動し、ダイナミックかつまたはまたはであるかどうかを判断して、自動的に、またはこれかテイクダウンするために使用されます。

十八、MyBatisのは、SQLパッケージを実行する方法であるが、対象物とリターンの結果ですか?マッピングの形式は何ですか?

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

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

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

XX、エンティティクラスの属性名のフィールド名とテーブルは、同じでない場合であれば指定されたPOJOへの問合せパッケージの結果?

A:
1、SQL文のクエリの別名でフィールド名を定義することもできます。
2、エンティティクラスのフィールド名と属性名をマッピングすることにより、1対1の関係。

文の書き方などのXXIあいまいクエリ?

A:
1、Javaのスプライシングワイルドカードで、#{}割り当てによる
スプライシングSQL文のワイルドカード2(SQL危険注射原因)

XXIIは、通常、XMLマッピング・ファイル、ダオに対応するインタフェースを記述ダオの作品、オーバーロードすることができますか?

:見ているXMLはダオによって、SQLに対応するので、あなたは、リロードすることができないときの保存と戦略を見つけるの完全修飾名+メソッド名。インタフェースは、JDKの動的プロキシ原理で動作し、実行時DAOプロキシを生成し、プロキシオブジェクトは、対応するSQL戻りデータを実行するために、インタフェースメソッドをインターセプトします。

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

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

二十四、XMLマッピングファイルのMyBatisの、異なるXMLマッピングファイル、IDあなたは繰り返すことができますか?

:すべての名前空間が必要とされていない後、しかし、ベストプラクティス、それ;構成された名前空間が存在しない場合は、idが繰り返すことはできません別のXMLマッピングファイルには、コンフィギュレーションの名前空間場合は、IDを繰り返すことができます。その理由は、名前空間は、IDを残し、そして、idは互いに上書きデータを複製するために導くません場合、その名前空間+ idは、キーマップとして使用されています。名前空間では、自然のidは、異なる名前空間、名前空間+自然に異なるIDを繰り返すことができます。

XXV、どのようにMyBatisのバッチを実行しますか?

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

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

A:MyBatisのは、SimpleExecutor、ReuseExecutor、バッチ処理の基本的な3つのエグゼキュータがあります。1)SimpleExecutor:たびに更新または選択は、単に、Statementオブジェクトを開き、すぐに閉じられたStatementオブジェクトを実行します。2)ReuseExecutor:)更新を実行するか選択し、SQL Statementオブジェクトを見つけるための鍵は、使用上に存在するとして、それが作成するために存在していない、使用後に、閉じないStatementオブジェクトの操作を行いますが、MAP3に配置されたバッチ処理:完全なバッチ。

XXVIIは、どのようにMyBatisのエグゼキュータを使用するかを指定しますか?

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

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

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

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

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

三十、どのように自動的に生成された(マスター)キーを取得するには?

A:設定ファイルがtrueに設定されているusegeneratedkeys

XXXI、どのようにマッパーで複数のパラメータを渡すには?


1、プロセスパラメータに直接渡され、XMLファイル{0}#{#1}を取得するために
@paramノートを使用して、2:これは、直接XMLファイル名位によるものであってもよい{}得ること

XXXII、違いresultTypeとこのresultMap?

A:
1、クラス名と同じデータベース、パラメータはresultTypeとPOJOタイプに直接提供されてもよい
異なる場合、図2に示すように、結果は、セットこのresultMap名と姓変換POJOに必要

MyBatisのマッパー・インタフェース・コールを使用した場合33または何が必要ですか?

A:
1、同mapper.xmlで定義されたIDマッパーSQL名とインタフェースメソッドの各々
2、同じタイプのParameterTypeは、各入力パラメータの種類とで定義さmapper.xmlマッパーインターフェース方法SQL
3、マッパーインターフェース方法を各タイプの出力パラメータはmapper.xml定義SQL同じタイプresultTypeと
4、mapper.xmlファイルの名前空間、すなわちクラスパスマッパーインターフェース。

三十 - 4、何MyBatisのiBatisのいくつかの改善より大きい?

A:
1、SQL SQLの結合結合注釈およびXMLを含め、インタフェース・バインディングを有する
関連の導入で、一から一、多くの1つに)元のダイナミックからノード構成はOGNL式3になるSQL、2多くのノードのコレクションを導入するが、内部このresultMapに配置されている場合

三十五、iBatisのコア処理クラスでそれぞれ何MyBatisの?

A:クラス有料のSqlMapClientの処理コア内部のiBATISは、MyBatisのSQLSESSIONと呼ばれるコアの処理クラスの内部。

三十六、iBatisのとMyBatisのはどのような内容が異なりますか?

A:
1、変数名は、元の変数の##位{変数が}となるしたSQLれる
2、$ {変数}に元の変数
のSQLクラス名内の元のノードに支払タイプを変更している3、
4、。オリジナルqueryForObject queryForListコア構成ファイルの内部に配置され、元のエイリアスマッピングファイル内)selectOne selectList5なります。

 

国民の関心の猿社会プログラム番号、キーワード「返信インタビューを顔の質問を取得するには、」ZK、ダボ、springboot、springcloud、 mybatils、アポロおよびその他の技術。

 

いいえ公共:プログラムAPEない社会

毎週リアルタイム更新

おすすめ

転載: www.cnblogs.com/myworked/p/12122853.html