#1. MyBatis における名前空間の役割を説明します。
大規模なプロジェクトでは、多数の SQL ステートメントが存在する可能性がありますが、現時点では、各 SQL ステートメントに一意の識別 (ID) を与えるのは簡単ではありません。この問題を解決するために、MyBatis では、マッピング ファイルごとに一意の名前空間を作成し、このマッピング ファイルで定義された各 SQL ステートメントがこの名前空間で定義された ID になるようにすることができます。
この ID が各ネームスペースで一意であることが保証できれば、たとえ異なるマッピング ファイル内のステートメント ID が同じであっても、競合は発生しなくなります。
(推奨チュートリアル: java クイック スタート )
2. MyBatis の動的 SQL とは何を意味しますか?
一部の複雑なクエリでは、複数のクエリ条件を指定することがありますが、これらの条件は存在する場合と存在しない場合があります。永続層フレームワークを使用しない場合は、SQL をアセンブルする必要がある場合があります。しかし、MyBatis はこの問題を解決するために動的 SQL 機能を提供します。
MyBatis で動的 SQL を実装するために使用される要素は主に次のとおりです:
- if - 選択 / いつ / それ以外の場合 - トリム - 場所 - 設定 - foreach
使用例:
<select id="foo" parameterType="Blog" resultType="Blog"> select * from t_blog where 1 = 1 <if test="title != null"> and title = #{title} </if> <if test="content != null"> and content = #{content} </if> <if test="owner != null"> and owner = #{owner} </if> </select>
3. JDBC プログラミングの欠点は何ですか? MyBatis はこれらの問題をどのように解決しますか?
MyBatis: SqlMapConfig.xml でデータ リンク プールを構成し、接続プールを使用してデータベース リンクを管理します。 (2) JDBC: SQL ステートメントがコード内に記述されるため、コードの保守が困難になります。SQL の実際のアプリケーションは大幅に変更される可能性があり、SQL の変更には Java コードの変更が必要です。 MyBatis: XXXXmapper.xml ファイルで SQL ステートメントを構成し、Java コードから分離します。 (3) JDBC: SQL ステートメントにパラメーターを渡すのは面倒です。SQL ステートメントの where 条件は必ずしも確実ではなく、多かれ少なかれ一定である可能性があり、プレースホルダーはパラメータは 1 対 1 です。 MyBatis: Mybatis は Java オブジェクトを SQL ステートメントに自動的にマップします。 (4) JDBC: 結果セットを解析するのは面倒です。SQL の変更により解析コードも変更されるため、解析する前にコードを走査する必要があります。データベース レコードを次のように解析すると便利です。ポジョオブジェクト。 MyBatis: Mybatis は SQL 実行結果を Java オブジェクトに自動的にマッピングします。4. MyBatis と Hibernate の違いは何ですか?
(1) Mybatis は Hibernate とは異なります。MyBatis はプログラマ自身が SQL ステートメントを記述する必要があるため、完全な ORM フレームワークではありません。ただし、mybatis は、XML または XML を通じて実行されるように SQL ステートメントを柔軟に設定できます。そして、Java オブジェクトと SQL ステートメントをマップして最終的に実行される SQL を生成し、最後に SQL 実行の結果をマップして Java オブジェクトを生成します。
(2) Mybatis は学習閾値が低く習得が容易であり、プログラマが独自の SQL を直接記述することができるため、SQL の実行性能を厳密に制御することができ、柔軟性が高く、複雑なソフトウェア開発に非常に適しています。インターネット ソフトウェア、エンタープライズ オペレーション ソフトウェアなどのリレーショナル データ モデルに対する高い要件があります。この種のソフトウェアに対する需要は頻繁に変化するため、需要が変化すると結果を迅速に出力する必要があります。ただし、柔軟性の前提として、mybatis はデータベースに依存できないため、複数のデータベースをサポートするソフトウェアを実装する必要がある場合は、複数の SQL マッピング ファイルをカスタマイズする必要があり、作業負荷が高くなります。 (3) Hibernate は、強力なオブジェクト/リレーショナル マッピング機能と優れたデータベース独立性を備えています。リレーショナル モデルに対する要件が高いソフトウェア (要件が固定されたカスタマイズされたソフトウェアなど) の場合、Hibernate を使用して開発すると、次のことが可能になります。多くのコードを節約し、効率を向上させます。しかし、Hibernate の欠点は、学習の敷居が高く、習熟の敷居がさらに高いことであり、O/R マッピングをどのように設計するか、パフォーマンスとオブジェクト モデルをどのように比較検討するか、Hibernate を上手に使用する方法が必要であることです。強力な経験と能力。 要するに、限られたリソース環境でユーザーのニーズに合わせて保守性と拡張性の良いソフトウェアアーキテクチャを作ることができれば、それは良いアーキテクチャなので、フレームワークはあくまで適切であれば最高です。5. MyBatis の一次キャッシュと二次キャッシュについて簡単に説明してください。
Mybatis は、まずキャッシュ内の結果セットをクエリします。結果セットがない場合は、データベースにクエリします。存在する場合は、キャッシュから結果セットを取得し、データベースにアクセスせずに返します。データベース。 Mybatis の内部ストレージ キャッシュは HashMap を使用し、キーは hashCode sqlId SQL ステートメントです。 value は、クエリからのマッピングによって生成された Java オブジェクトです。
Mybatis の 2 次キャッシュはクエリ キャッシュです。そのスコープはマッパーの名前空間です。つまり、同じ名前空間で SQL をクエリすると、キャッシュからデータを取得できます。 2 次キャッシュは SqlSession にまたがることができます。 推奨される関連ビデオ チュートリアル:Java ビデオ チュートリアル
以上がJava 永続層インタビューの質問 (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。