MyBatisのインタビューの質問

1.1.1。メインオブジェクトが導入され

SqlSessionFactoryBuilder

    MyBatisdeコア・コンフィギュレーション・ファイルをロードすることで、SqlSessionFactoryを作成し、あなたが作成する必要はありません後

SqlSessionFactory

      OpenSessionの異なるオーバーロードされたメソッドを定義します。

 SQLSESSION(スレッドセーフ)

      これは、データベース、CRUDの動作を規定します

1.1.2。MyBatisのプログラミング手順 

(0)SqlSessionFactoryBuilderを作成   

(1)SqlsesionFactoryBuilderによってsqlSessionFactoryを作成   

(2)SqlSessionFactoryによってSQLSESSIONを作成     

(3)データベース操作SQLSESSIONを行うことにより   

(4)トランザクションをコミットする)(session.commitを呼び出します   

(5)セッションを閉じるために)(session.closeを呼び出します

1.1.3。キャッシュ

レベルのキャッシュ(SQLSESSIONレベル)、MyBatisのキャッシュスコープが同じSQLSESSION(キャッシュからのとき複数のクエリは、二度目のチェックになります)で、キャッシュはデフォルトで有効になっています。注意:SQLSESSIONは、DML操作(挿入、更新、削除)を行い、コミット()操作を実行した場合、SQLSESSIONがキャッシュにクリアされますMyBatisの、そうすることの目的は、キャッシュされたデータが格納されていることを確認することですダーティリード現象を回避するための最新情報。

 

二次キャッシュ(マッパーレベル)、二次キャッシュの範囲は、同じ名前空間マッパーで2回実行同じSQL文、最初のパフォーマンスは、それらのキャッシュに保存されたデータを照会します後、第二は、キャッシュからになりますクエリの効率を改善するために、検索するには、デフォルトでは開いていません。注:二次キャッシュを使用する場合は、Javaオブジェクトクエリ結果のマッピングは、シリアライズとデシリアライズにjava.io.Serializableインタフェースを実装する必要があります

1.1.4。$#{}と{}

{#}は、PreparedStatementの#{}、自動型変換のJava JDBCタイプとプレースホルダの値を設定することによって実現することができるプレースホルダを示します。{#} SQLインジェクションを効果的に防止することができます。#{} POJO単純型値または属性値を受信して​​もよいです。単一のParameterType単純型値の送信#{}括弧は、値または他の名前であってもよい場合。

 

$ {}スプライシングSQL文字列}のParameterType着信コンテンツは、単一の単純型値のParameterTypeの送信場合、$ {$ {}によってSQLのJDBCの型変換は、POJO単純型値または属性値を受信することがスプライシングされていないができ表し、$ {}括弧値のみ。

ラベル1.1.5。XMLマッピング・ファイル

一般的な選択に加えて|挿入| updae |設定| | |タグを削除するよりも、<このresultMap>、<なparameterMap>、<SQL>、、<selectKey>、プラス9個の動的SQLタグ、トリム<include>のforeachの|選択| |あればそうでない| |、などをバインドする。ここで、<SQL> SQL断片のタグは、断片導入されたSQLは、<include>タグを使用、<selectKey>ラベルの主キーの生成方法増分をサポートしていないとき。

動的SQL MyBatisの原則の1.1.6実装

セット| | |ラベル動的SQL、完了論理と動的にスプライシングSQL関数の形で記述されたXMLマッピング・ファイルでは、MyBatisのは9つの動的SQLタグトリムを提供するforeach |選択| |場合とき|そう|バインド。

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

1.1.7質問:ベストプラクティス、通常、XMLマッピング・ファイルは、対応するダオ・インタフェース(マッパー)を書きます、私は、インターフェイスの動作原理は、ダオものですされ、求めることができますか?方法、パラメータのDAOインターフェイスが異なる、方法は、それをリロードすることができますか?

DAOインターフェイスは、インターフェイスのマッパーインタフェースの完全修飾名は、マップ・ファイル値の名前空間であり、インタフェースメソッド名がMappedStatement値は、インターフェースメソッド内のパラメータは、SQLに渡されるIDマッピングファイルであることを特徴とすることが多いですパラメータ。メソッド呼び出しインタフェース、インタフェース名+文字列連結キー値として完全に修飾されたメソッド名は、例えば、一意に配置MappedStatementであってもよい場合マッパーは、実装クラスのインターフェイスではない:com.mybatis3.mappers.StudentDao.findStudentByIdは、一意の名前空間を見つけることができますID = findStudentById com.mybatis3.mappers.StudentDaoはMappedStatement未満です。

MyBatisの中で、それぞれが<挿入>、<選択> <更新>は、<削除>タグはMappedStatementオブジェクトに解決されます。

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

DAOインターフェイスがJDKダイナミックプロキシが示されるSQL MappedStatementの実装に有利なプロキシオブジェクトプロキシインターセプト・インタフェース・メソッド、JDKの動的プロキシ・インタフェース生成DAOプロキシプロキシオブジェクトを実行MyBatisのに使用される動作であり、次に、SQL実行結果が返されます。

1.1.8。すなわち、どのように達成するために、いくつかのインタフェースバインディングの実装がありますか?

インターフェイスは、1がバインディングアノテーションを介して行われ、二つの方法で実装バインディング、それはプラス上記のインターフェースの過程にある@バインディングアノテーションを使用するときにSQL文が単純であるとき、バインドするためにノートや他のSQL文を含む@のアップデートを選択します

もう一つは、インタフェースのフルパス名でなければなりません名前空間内のXMLマッピングファイルを指定するには、この場合には、内部のXMLを結合することによって、SQLを記述することです。

1.1.9。ターゲットオブジェクトの結果であるSQLパッケージを実行する方法をMyBatisの

最初は、列名とオブジェクトのプロパティの名前との間のマッピングを定義する、<このresultMap>タグを使用することです。

最初は、目的に応じて、resultTypeとを使用する名前の属性マッピングすることです

1.1.10。MyBatisの、どのように動作させるために達成するための多くの方法があるのですか?

そして関節問い合わせネストされたクエリを有し、クエリは、関節複数のテーブルが結合されるクエリは、一度だけ、コレクションの内部に配置されたノードこのresultMapにより多くのコンフィギュレーションクラスを完成させることができる;(協会して配置しました)

ネストされたクエリは、データクエリの内部だけでなく、コレクションを配置することにより、テーブルにさらにその後、内部、外部キーテーブルIDの結果によれば、テーブルを確認し、そしてすることであるが、さらに、ルックアップテーブル選択ノード構成によって(<コレクションプロパティ= "先生 "列=" teacher_id "のJavaType =" me.gacl.domain.Teacher "を選択=" getTeacher2「> </コレクション>)。

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

ページングを使用してMyBatisのRowBoundsオブジェクト、実行するように設定されたメモリページングResultSetの結果のために、あなたはまた、物理ページを完了するために、改ページのプラグインを使用することができています。

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

例:SQLを傍受するために、学生を上書きSELECT * FROM:(学生から選択*)からの*トンを選択するトンの上限0,10。

1.1.12。MyBatisの概説原則を差し込み、だけでなく、プラグインを作成する方法

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

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

何であるかの原則をロード中1.1.13。MyBatisの遅延

偽| MyBatisの会合は唯一の遅延ロードに関連付けられているオブジェクトの収集及び関連オブジェクトのコレクションをサポートし、MyBatisの設定ファイルでは、あなたが遅延読み込みを有効にするかどうかを設定することができます=真lazyLoadingEnabled。

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

1.1.14。MyBatisのBは、タグが参照によってタグに、Bのラベルは、後ろで定義することができるが含まれますか?

MyBatisのXML解析マップファイルを順に解析されるが、はい、しかし、Bのラベルは、まだどこにも定義することができます参照されています。

原理は、ラベルの解析をMyBatisのされ、参照Bは、ラベルタグを見つけたが、タグBは、このとき存在せず、全てまでラベルは、未解決MyBatisの、ラベルの残りの部分を解析し、Bを含むラベルであろう標識タグ解像度が完了すると、MyBatisの再レンダリング未解決のタグとマークされている、その後、再解析する時間ラベルA、Bタグがすでに存在している、それが正常に行われたラベルを解決することができます。

1.1.15。xmlファイルとMyBatisの内部データ構造との間のマッピング

XMLは、コンフィギュレーションヘビー級のオブジェクト内にカプセル化すべての設定情報をMyBatisの。XMLマッピングファイルでは、<なparameterMap>タグがオブジェクトをなparameterMapに解決され、各サブエレメントはParameterMappingオブジェクトとして解析されます。<このresultMap>タグは、オブジェクトをこのresultMapに解決され、各サブ要素は、オブジェクトをResultMappingとして解析されるであろう。各<選択>、<挿入>、<更新>タグはMappedStatementオブジェクトに解決される<削除>、タグBoundSql内のSQLは、オブジェクトに解析されます。

1.1.16。MyBatisのと異なる冬眠

カプセル化されたデータベースのプロセスのJDBC操作をMyBatisの。変更することは容易に実行するXML構成することで、SQL文またはコメント、SQL文を制御するための柔軟性。それは自動的にJava Beanオブジェクトに結果セットを変換することができます。

オブジェクト/リレーショナルマッピング機能と強力を休止。HQL文を書くことができ、あなたは、データベースを横断することができます

おすすめ

転載: www.cnblogs.com/xyfaneast/p/11295731.html