-
Hibernate はどのように機能し、なぜそれを使用する必要があるのですか?
原理:
1. 設定ファイルを読み取って解析する
2. マッピング情報を読み取って解析し、SessionFactory を作成します。
3.オープンセッション
4. トランザクションの作成
5. 永続化操作
6. トランザクションを送信する
7.セッションを閉じる
8. SessionFactoryを閉じる
使用する理由:
1. データベースへの JDBC アクセスのコードはカプセル化されており、データ アクセス層の退屈で反復的なコードが大幅に簡素化されます。
2. Hibernate は、JDBC と優れた ORM 実装に基づいた主流の永続性フレームワークです。これにより、DAO 層のコーディング作業が大幅に簡素化されます。
3. Hibernate は、透過性を実現するために、バイトコード拡張プログラムの代わりに Java リフレクション メカニズムを使用します。
4. Hibernate は軽量のフレームワークであるため、パフォーマンスが非常に優れています。マッピングの柔軟性は抜群です。 1 対 1 から多対多の複雑な関係まで、さまざまなリレーショナル データベースをサポートします。
2. Hibernate の遅延ロードはどのように行われますか?
1. Hibernate2 遅延読み込みの実装: a) エンティティ オブジェクト b) コレクション (コレクション)
2. Hibernate3はプロパティの遅延ロード機能を提供します
Hibernate がデータをクエリするとき、データはメモリに存在しませんが、プログラムが実際にデータを操作するとき、オブジェクトはメモリに存在するため、サーバーのメモリ オーバーヘッドが節約され、サーバーのパフォーマンスが向上します。 。 パフォーマンス。
3. Hibernate でクラス間の関係 (1 対多、多対多の関係など) を実現するにはどうすればよいですか?
クラス間の関係は、主にテーブル間の関係の操作に反映されます。すべてのテーブルとクラスはプログラム内で一緒にマップされ、構成ファイル -one で一緒にマップされます。 1対多、多対多、
4. Hibernate のキャッシュ メカニズムについて話しましょう
1. 内部キャッシュは Hibernate に存在し、1 次キャッシュとも呼ばれ、アプリケーションのトランザクション レベル キャッシュに属します。
2. 2次キャッシュ:
a) アプリケーションとキャッシュ
b) 分散キャッシュ条件: データが第三者によって変更されない、データ サイズが許容範囲内、データ更新頻度が低い、システムで同じデータが頻繁に使用される、重要でないデータ
c) サードパーティキャッシュの実装
5. Hibernateクエリメソッド
SQL、条件、オブジェクトの構成
本社:
1. 属性クエリ
2. パラメータクエリ、名前付きパラメータクエリ
3. 関連するクエリ
4. ページングクエリ
5. 統計関数
6. Hibernate を最適化するにはどうすればよいですか?
1. 一方向の 1 対多の関連付けではなく、双方向の 1 対多の関連付けを使用します。
2. 一方向の 1 対多の関連付けの柔軟な使用
3. 1 対 1 の代わりに、多対 1 を使用します。
4. オブジェクト キャッシュを構成し、コレクション キャッシュを使用しない
5. 1 対多のコレクションには Bag を使用し、多対多のコレクションには Set を使用します。
6. 継承されたクラスで明示的なポリモーフィズムを使用する
7. テーブルのフィールドは少なくし、テーブルの関連付けが多すぎることを恐れず、2 次キャッシュをサポートする必要があります。
7. Struts はどのように機能するのでしょうか? Struts を使用する理由
動作メカニズム:
Struts ワークフロー:
Web アプリケーションが開始されると、初期化 ActionServlet がロードされ、ActionServlet が開始されます。
struts-config.xml ファイルから設定情報を読み取り、それをさまざまな設定オブジェクトに保存します。ActionServlet は顧客のリクエストを受け取ると、次のプロセスを実行します。
-(1) ユーザーリクエストに一致する ActionMapping インスタンスを取得します。存在しない場合は、無効なリクエスト パス情報を返します。
-(2) ActionForm インスタンスが存在しない場合は、ActionForm オブジェクトを作成し、顧客が送信したフォーム データを ActionForm オブジェクトに保存します。
-(3) 構成情報に基づいてフォームの検証が必要かどうかを判断します。検証が必要な場合は、ActionForm の validate() メソッドを呼び出します。
-(4) ActionForm の validate() メソッドが null を返すか、ActionMessage を含まない ActuibErrors オブジェクトを返す場合、フォームの検証が成功したことを意味します。
-(5) ActionServlet は、ActionMapping に含まれるマッピング情報に基づいて、リクエストを転送するアクションを決定します。対応するアクション インスタンスが存在しない場合は、まずこのインスタンスを作成し、次にアクションのexecute() メソッドを呼び出します。
-(6) アクションのexecute()メソッドはActionForwardオブジェクトを返し、ActionServletは顧客リクエストをActionForwardオブジェクトが指すJSPコンポーネントに転送します。
-(7) ActionForward オブジェクトは、動的な Web ページを生成して顧客に返す JSP コンポーネントを指します。
使用する理由:
JSP、サーブレット、および JavaBean テクノロジーの出現により、強力なエンタープライズ アプリケーション システムを構築できるようになりました。しかし、これらの技術で構築されるシステムは非常に複雑なので、その上でそれらの技術を整理するためのルールが必要となり、それがStrutsとして誕生しました。
Strutsをベースに開発されたアプリケーションは、コントローラーコンポーネント、モデルコンポーネント、ビューコンポーネントの3種類のコンポーネントで構成されます。
8. Struts の検証フレームワークはどのように検証するのでしょうか?
struts 構成ファイルで特定のエラー プロンプトを構成し、FormBean で validate() メソッドを具体的に呼び出します。
9. Strutsのデザインパターンについて話しましょう
MVC モード: Web アプリケーションの開始時に、ActionServler がロードされて初期化されます。ユーザーがフォームを送信すると、構成された ActionForm オブジェクトが作成され、フォームの対応するデータが入力されます。ActionServler は、必要に応じて、Struts-config.xml ファイルで構成された設定に基づいてフォーム検証が必要かどうかを判断します。 ActionForm の Validate() 検証後、リクエストを送信するアクションを選択します。アクションが存在しない場合、ActionServlet は最初にこのオブジェクトを作成し、次にアクションのexecute() メソッドを呼び出します。 Execute() は、ActionForm オブジェクトからデータを取得し、ビジネス ロジックを完了し、ActionForward オブジェクトを返します。その後、ActionForward オブジェクトで指定された JSP コンポーネントに顧客のリクエストが転送され、動的 Web ページが生成されます。それを顧客に返却します。
10.スプリングはどのように機能し、なぜ使用する必要があるのでしょうか?
1. Spring MVC は、すべてのリクエストを DispatcherServlet に送信するように要求します。これにより、アプリケーション システムの他のモジュールがリクエストの実際の処理を担当します。
2.DispatcherServlet は 1 つ以上の HandlerMapping をクエリして、リクエストを処理するコントローラーを見つけます。
3.DispatcherServlet はターゲット コントローラーにリクエストを送信してください
4. コントローラーがビジネス ロジック処理を実行すると、ModelAndView が返されます。
5.Dispathcher は 1 つ以上の ViewResolver ビュー パーサーにクエリを実行し、ModelAndView オブジェクトで指定されたビュー オブジェクトを見つけます。
6. ビュー オブジェクトは、ビュー オブジェクトをレンダリングしてクライアントに返す責任があります。
使用する理由:
{AOP を使用すると、開発者は横断的懸念と呼ばれる非行動的な懸念を作成し、アプリケーション コードに挿入できます。 AOP を使用すると、ドメイン オブジェクトのオブジェクト モデルの複雑さを増すことなく、パブリック サービス (ロギング、永続性、トランザクションなど) をアスペクトに分解し、ドメイン オブジェクトに適用できます。
IOC を使用すると、オブジェクトを構築し、それらのオブジェクトに連携オブジェクトを渡すことができるアプリケーション環境を作成できます。反転という言葉が示すように、IOC は JNDI を逆にしたようなものです。多数の抽象ファクトリー、サービス ロケーター、シングルトン、および単純な構造を使用する代わりに、すべてのオブジェクトは連携するオブジェクトから構築されます。したがって、コンテナはコラボレーション オブジェクト (コラボレータ) を管理します。
Spring は AOP フレームワークですが、IOC コンテナでもあります。 Spring の最も優れた点は、オブジェクトの置換に役立つことです。 Spring では、JavaBean プロパティと構成ファイルを使用して依存関係 (連携オブジェクト) を追加するだけです。必要に応じて、連携するオブジェクトを同様のインターフェイスに簡単に置き換えることができます。 }
Spring フレームワークは、7 つの明確に定義されたモジュールで構成される階層化されたアーキテクチャです。 Spring モジュールは、図 1 に示すように、Bean の作成、構成、管理方法を定義するコア コンテナの上に構築されます。
Spring フレームワークを構成する各モジュール (またはコンポーネント) は、単独で存在することも、1 つ以上の他のモジュールと組み合わせて実装することもできます。各モジュールの機能は次のとおりです。
☆ コアコンテナ: コアコンテナは Spring フレームワークの基本機能を提供します。コア コンテナの主なコンポーネントは、ファクトリ パターンの実装である BeanFactory です。 BeanFactory は、制御の反転 (IOC) パターンを使用して、アプリケーションの構成および依存関係の仕様を実際のアプリケーション コードから分離します。
☆ Spring コンテキスト: Spring コンテキストは、Spring フレームワークにコンテキスト情報を提供する設定ファイルです。 Spring コンテキストには、JNDI、EJB、電子メール、国際化、検証、ディスパッチ機能などのエンタープライズ サービスが含まれています。
☆ Spring AOP: Spring AOP モジュールは、構成管理機能を通じて、アスペクト指向プログラミング機能を Spring フレームワークに直接統合します。したがって、Spring フレームワークによって管理されるオブジェクトを AOP サポートにするのは簡単です。 Spring AOP モジュールは、Spring ベースのアプリケーションのオブジェクトにトランザクション管理サービスを提供します。 Spring AOP を使用すると、EJB コンポーネントに依存せずに、宣言型トランザクション管理をアプリケーションに統合できます。
☆ Spring DAO: JDBC DAO 抽象化レイヤーは、さまざまなデータベース ベンダーによってスローされる例外処理とエラー メッセージを管理するために使用できる、意味のある例外階層を提供します。例外階層により、エラー処理が簡素化され、作成する必要がある例外コード (接続の開閉など) の量が大幅に削減されます。 Spring DAO の JDBC 指向の例外は、一般的な DAO 例外階層に従います。
☆ Spring ORM: Spring フレームワークは、JDO、Hibernate、iBatis SQL Map などの ORM オブジェクト リレーショナル ツールを提供するために、いくつかの ORM フレームワークを挿入します。これらはすべて、Spring の汎用トランザクションと DAO 例外階層に準拠しています。
☆ Spring Web モジュール: Web コンテキスト モジュールはアプリケーション コンテキスト モジュール上に構築され、Web ベースのアプリケーションにコンテキストを提供します。したがって、Spring フレームワークは Jakarta Struts との統合をサポートしています。また、Web モジュールにより、マルチパート リクエストの処理とリクエスト パラメータのドメイン オブジェクトへのバインドも簡素化されます。
☆ Spring MVC フレームワーク: MVC フレームワークは、Web アプリケーションを構築するためのフル機能の MVC 実装です。ストラテジー インターフェイスを通じて、MVC フレームワークは高度に構成可能になり、MVC は JSP、Velocity、Tiles、iText、POI などの多数のビュー テクノロジに対応します。
Spring Framework の機能は任意の J2EE サーバーで使用でき、ほとんどの機能は管理対象外の環境にも適しています。 Spring の核心は、特定の J2EE サービスに関連付けられていない再利用可能なビジネスおよびデータ アクセス オブジェクトをサポートすることです。このようなオブジェクトは、異なる J2EE 環境 (Web または EJB)、スタンドアロン アプリケーション、およびテスト環境の間で再利用できることに疑いの余地はありません。
IOCとAOP
制御の反転パターン (依存関係介入とも呼ばれます) の基本概念は、オブジェクトを作成するのではなく、オブジェクトの作成方法を記述するというものです。コード内のオブジェクトやサービスには直接接続されていませんが、どのコンポーネントがどのサービスを必要とするかは構成ファイルに記述されています。コンテナ (Spring フレームワークでは IOC コンテナ) は、これらを結び付ける役割を果たします。
一般的な IOC シナリオでは、コンテナーがすべてのオブジェクトを作成し、それらを接続してメソッドをいつ呼び出すかを決定するために必要なプロパティを設定します。次の表に IOC の実装モードを示します。
Spring フレームワークの IOC コンテナは、タイプ 2 とタイプ 3 を使用して実装されます。
アスペクト指向プログラミング
アスペクト指向プログラミング (AOP) は、プログラマがロギングやトランザクション管理などの懸念事項や一般的な責任範囲を横断する動作をモジュール化できるようにするプログラミング手法です。 AOP の中核となる構成要素はアスペクトであり、複数のクラスに影響を与える動作を再利用可能なモジュールにカプセル化します。
AOP と IOC は、エンタープライズ アプリケーション開発における複雑な問題を解決するためにモジュラー アプローチを使用する補完的なテクノロジです。典型的なオブジェクト指向開発アプローチでは、ロギング機能を実装するために、すべてのメソッドと Java クラスにロギング ステートメントを配置できます。 AOP アプローチでは、ログ サービスをモジュール化して、ログを必要とするコンポーネントに宣言的に適用できます。もちろん、Java クラスがログ サービスの存在を知る必要がなく、関連コードを考慮する必要もないという利点があります。したがって、Spring AOP で記述されたアプリケーション コードは疎結合になります。
AOP の機能は、Spring トランザクション管理、ロギング、その他のさまざまな機能のコンテキストに完全に統合されています。
IOCコンテナ
Spring の設計の中核は org.springframework.beans パッケージであり、JavaBean コンポーネントで使用するように設計されています。このパッケージは通常、ユーザーによって直接使用されることはありませんが、サーバーによって他のほとんどの機能の下位レベルの仲介として使用されます。次に高いレベルの抽象化は BeanFactory インターフェースです。これは Factory 設計パターンの実装であり、オブジェクトを名前で作成および取得できるようにします。 BeanFactory はオブジェクト間の関係も管理できます。
BeanFactory は 2 つのオブジェクト モデルをサポートします。
□ 単相モデルは、クエリ時に取得できる特定の名前を持つオブジェクトの共有インスタンスを提供します。シングルトンはデフォルトであり、最も一般的に使用されるオブジェクト モデルです。ステートレスなサービス オブジェクトに最適です。
□ プロトタイプ モデルにより、取得ごとに個別のオブジェクトが作成されます。プロトタイプ モデルは、各ユーザーが独自のオブジェクトを必要とする場合に最適です。
Bean Factory の概念は、IOC コンテナーとしての Spring の基礎です。 IOC は、処理の責任をアプリケーション コードからフレームワークに移します。次の例で説明するように、Spring フレームワークは JavaBean プロパティと構成データを使用して、どの依存関係を設定する必要があるかを示します。
BeanFactory インターフェース
org.springframework.beans.factory.BeanFactory は単純なインターフェースであるため、基盤となるさまざまなストレージ メソッドに実装できます。最も一般的に使用される BeanFactory 定義は XmlBeanFactory で、リスト 1 に示すように、XML ファイル内の定義に基づいて Bean をロードします。
リスト 1. XmlBeanFactory
BeanFactory ファクトリー = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
XML ファイルで定義された Bean は受動的にロードされます。つまり、Bean 自体は、Bean が必要になるまで初期化されません。 BeanFactory から Bean を取得するには、リスト 2 に示すように、getBean() メソッドを呼び出して、取得する Bean の名前を渡します。
リスト 2. getBean()
MyBean mybean = (MyBean) Factory.getBean("mybean");
各 Bean 定義は、POJO (クラス名と JavaBean 初期化プロパティで定義) または FactoryBean にすることができます。 FactoryBean インターフェイスは、Spring フレームワークを使用して構築されたアプリケーションに間接的なレベルを追加します。
IOCの例
制御の反転を理解する最も簡単な方法は、その動作を実際に見ることです。 3 部構成の Spring シリーズの第 1 部は、Spring IOC コンテナーを介してアプリケーションの依存関係を (ビルドするのではなく) 注入する方法を示す例で締めくくりました。
私はオンライン クレジット アカウントを開設するというユースケースを出発点として使用しました。この実装では、クレジット アカウントを開くには、ユーザーが次のサービスを操作する必要があります。
☆信用格付けサービス、ユーザーの信用履歴情報を照会します。
☆ 顧客情報を入力し、顧客情報をクレジットカードや銀行情報と連携して自動引き落としするリモートメッセージ連携サービス(必要な場合)。
☆クレジットカードの利用状況をメールでお知らせするメールサービスです。
3つのインターフェース
この例では、サービスがすでに存在しており、理想的にはそれらを疎結合な方法で統合すると仮定します。次のリストは、3 つのサービスの API を示しています。
リスト 3. CreditRatingInterface
パブリック インターフェイス CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer);
}
リスト 3 に示す信用格付けインターフェイスは、信用履歴情報を提供します。顧客情報を含む Customer オブジェクトが必要です。このインターフェイスの実装は、CreditRating クラスによって提供されます。
リスト 4. CreditLinkingInterface
パブリックインターフェイス CreditLinkingInterface {
パブリック String getUrl();
public void setUrl(String url);
public void linkCreditBankAccount() は例外をスローします。
}
クレジット リンク インターフェイスは、信用履歴情報を銀行情報と結合し (必要な場合)、ユーザーのクレジット カード情報を挿入します。クレジット リンク インターフェイスはリモート サービスであり、そのクエリは getUrl() メソッドを通じて実行されます。 URL は Spring フレームワークの Bean 構成メカニズムによって設定されます。これについては後で説明します。このインターフェイスの実装は、CreditLinking クラスによって提供されます。
リスト 5. EmailInterface
パブリックインターフェイス EmailInterface {
public void sendEmail(ICustomer iCustomer);
public String getFromEmail();
public void setFromEmail(String fromEmail);
public String getPassword();
public void setPassword(文字列パスワード);
パブリック String getSmtpHost();
public void setSmtpHost(String smtpHost);
パブリック String getUserId() ;
public void setUserId(String userId);
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/loshu2003/archive/2009/12/31/5111344.aspx
-