-
Wie funktioniert Hibernate und warum sollten Sie es verwenden?
Prinzip:
1. Lesen und analysieren Sie die Konfigurationsdatei
2. Lesen und analysieren Sie die Zuordnungsinformationen und erstellen Sie eine SessionFactory
3. Sitzung öffnen
4. Erstellen Sie die Transaktion Transaktion
5. Persistenzoperationen
6. Transaktion abschicken
7. Sitzung schließen
8. Schließen Sie SessionFactory
Warum verwenden:
1. Der Code für den JDBC-Zugriff auf die Datenbank ist gekapselt, was den mühsamen und sich wiederholenden Code in der Datenzugriffsschicht erheblich vereinfacht.
2. Hibernate ist ein Mainstream-Persistenz-Framework, das auf JDBC und einer hervorragenden ORM-Implementierung basiert. Es vereinfacht die Codierungsarbeit der DAO-Schicht erheblich.
3. Der Ruhezustand verwendet den Java-Reflexionsmechanismus anstelle eines Bytecode-Erweiterungsprogramms, um Transparenz zu erreichen.
4. Die Leistung von Hibernate ist sehr gut, da es sich um ein leichtes Framework handelt. Die Flexibilität des Mappings ist herausragend. Es unterstützt verschiedene relationale Datenbanken, von Eins-zu-Eins- bis zu Viele-zu-Viele-Beziehungen.
2. Wie erfolgt Lazy Load im Ruhezustand?
1. Hibernate2 Lazy Loading-Implementierung: a) Entitätsobjekt b) Sammlung (Sammlung)
2. Hibernate3 bietet eine Funktion zum verzögerten Laden von Eigenschaften
Wenn Hibernate die Daten abfragt, sind die Daten nicht im Speicher vorhanden. Wenn das Programm tatsächlich mit den Daten arbeitet, ist das Objekt im Speicher vorhanden, wodurch der Speicheraufwand des Servers gespart und dadurch die Leistung des Servers verbessert wird . Leistung.
3. Wie kann die Beziehung zwischen Klassen im Ruhezustand realisiert werden (z. B. Eins-zu-Viele-Beziehung, Viele-zu-Viele-Beziehung)?
Die Beziehung zwischen Klassen spiegelt sich hauptsächlich in der Beziehung zwischen Tabellen wider. Alle Tabellen und Klassen werden in unserem Programm gemeinsam zugeordnet und in der Konfigurationsdatei gemeinsam zugeordnet. eins-zu-viele, viele-zu-viele,
4. Lassen Sie uns über den Caching-Mechanismus von Hibernate sprechen
1. Im Ruhezustand gibt es einen internen Cache, der auch als First-Level-Cache bezeichnet wird und zum Cache auf Anwendungstransaktionsebene gehört.
2. Cache der zweiten Ebene:
a) Anwendung und Cache
b) Verteilte Cache-Bedingungen: Daten werden nicht von Dritten geändert, die Datengröße liegt in einem akzeptablen Bereich, die Häufigkeit der Datenaktualisierung ist gering, die gleichen Daten werden häufig vom System verwendet, unkritische Daten
c) Implementierung eines Drittanbieter-Cache
5. Abfragemethode für den Ruhezustand
SQL, Kriterien, Objektzusammensetzung
Hql:
1. Attributabfrage
2. Parameterabfrage, benannte Parameterabfrage
3. Verwandte Abfrage
4. Paging-Abfrage
5. Statistische Funktionen
6. Wie optimiert man den Ruhezustand?
1. Verwenden Sie eine bidirektionale Eins-zu-Viele-Assoziation anstelle einer Einweg-Eins-zu-Viele-Assoziation.
2. Flexible Verwendung von Einweg-Eins-zu-Viele-Assoziationen
3. Verwenden Sie anstelle von Eins-zu-Eins stattdessen Viele-zu-Eins.
4. Konfigurieren Sie den Objektcache und verwenden Sie keinen Sammlungscache
5. Verwenden Sie Bag für One-to-Many-Sammlungen und Set für Many-to-Many-Sammlungen.
6. Verwenden Sie expliziten Polymorphismus in geerbten Klassen
7. Es sollte weniger Tabellenfelder geben, keine Angst vor zu vielen Tabellenzuordnungen haben und über die Unterstützung des Second-Level-Cache verfügen.
7. Wie funktioniert Struts? Warum Struts verwenden?
Arbeitsmechanismus:
Struts-Workflow:
Wenn die Webanwendung gestartet wird, wird das Initialisierungs-ActionServlet geladen. Das ActionServlet wird gestartet
Lesen Sie Konfigurationsinformationen aus der Datei struts-config.xml und speichern Sie sie in verschiedenen Konfigurationsobjekten. Wenn ActionServlet eine Kundenanfrage erhält, führt es den folgenden Prozess aus.
-(1) Rufen Sie die ActionMapping-Instanz ab, die der Benutzeranforderung entspricht. Wenn sie nicht vorhanden ist, werden ungültige Anforderungspfadinformationen zurückgegeben.
-(2) Wenn die ActionForm-Instanz nicht vorhanden ist, erstellen Sie ein ActionForm-Objekt und speichern Sie die vom Kunden übermittelten Formulardaten im ActionForm-Objekt.
-(3) Bestimmen Sie anhand der Konfigurationsinformationen, ob eine Formularvalidierung erforderlich ist. Wenn eine Validierung erforderlich ist, rufen Sie die Methode „validate()“ von ActionForm auf.
-(4) Wenn die Methode „validate()“ von ActionForm null oder ein ActuibErrors-Objekt zurückgibt, das keine ActionMessage enthält, bedeutet dies, dass die Formularvalidierung erfolgreich war;
-(5) ActionServlet entscheidet anhand der in ActionMapping enthaltenen Zuordnungsinformationen, an welche Aktion die Anforderung weitergeleitet werden soll. Wenn die entsprechende Aktionsinstanz nicht vorhanden ist, erstellen Sie zuerst diese Instanz und rufen Sie dann die Methodeexecute() der Aktion auf.
-(6) Die Methodeexecute() von Action gibt ein ActionForward-Objekt zurück und ActionServlet leitet die Kundenanforderung an die JSP-Komponente weiter, auf die das ActionForward-Objekt zeigt.
-(7) Das ActionForward-Objekt verweist auf die JSP-Komponente, um eine dynamische Webseite zu generieren, und gibt sie an den Kunden zurück.
Warum verwenden:
Das Aufkommen von JSP-, Servlet- und JavaBean-Technologien ermöglicht es uns, leistungsstarke Unternehmensanwendungssysteme zu entwickeln. Aber die mit diesen Technologien erstellten Systeme sind sehr kompliziert, daher brauchen wir darüber hinaus eine Regel, eine Regel, um diese Technologien zu organisieren. Dies ist das Framework, und Struts ist entstanden.
Auf Struts basierende Anwendungen bestehen aus drei Arten von Komponenten: Controller-Komponenten, Modellkomponenten und Ansichtskomponenten.
8. Wie überprüft das Validierungsframework von Struts?
Konfigurieren Sie bestimmte Fehleraufforderungen in der Struts-Konfigurationsdatei und rufen Sie dann speziell die Methode „validate()“ in FormBean auf.
9. Lassen Sie uns über das Designmuster von Struts sprechen
MVC-Modus: ActionServler wird beim Start der Webanwendung geladen und initialisiert. Wenn der Benutzer das Formular absendet, wird ein konfiguriertes ActionForm-Objekt erstellt und mit den entsprechenden Daten des Formulars ausgefüllt. ActionServler bestimmt anhand der in der Datei Struts-config.xml konfigurierten Einstellungen, ob eine Formularvalidierung erforderlich ist Validate() von ActionForm. Wählen Sie nach der Überprüfung aus, an welche Aktion die Anfrage gesendet werden soll. Wenn die Aktion nicht vorhanden ist, erstellt ActionServlet zuerst dieses Objekt und ruft dann die Methodeexecute() der Aktion auf. Execute() ruft Daten vom ActionForm-Objekt ab, vervollständigt die Geschäftslogik und gibt ein ActionForward-Objekt zurück. Anschließend leitet es die Kundenanforderung an die vom ActionForward-Objekt angegebene JSP-Komponente weiter gibt es an den Kunden zurück.
10. Wie funktioniert der Frühling und warum sollte er verwendet werden?
1. Spring MVC bittet alle Anfragen darum, an DispatcherServlet gesendet zu werden, das andere Module des Anwendungssystems mit der Verantwortung für die tatsächliche Verarbeitung der Anfragen beauftragt.
2. DispatcherServlet fragt ein oder mehrere HandlerMapping ab, um den Controller zu finden, der die Anforderung verarbeitet.
3.DispatcherServlet Bitte senden Sie die Anfrage an den Zielcontroller
4. Nachdem der Controller die Geschäftslogikverarbeitung durchgeführt hat, gibt er ein ModelAndView zurück
5. Dispathcher fragt einen oder mehrere ViewResolver-Ansichtsparser ab, um das durch das ModelAndView-Objekt angegebene Ansichtsobjekt zu finden
6. Das Ansichtsobjekt ist für das Rendern und Zurückgeben an den Client verantwortlich.
Warum verwenden:
{AOP ermöglicht es Entwicklern, nicht verhaltensbezogene Bedenken, sogenannte Querschnittsprobleme, zu erstellen und diese in den Anwendungscode einzufügen. Nach der Verwendung von AOP können öffentliche Dienste (wie Protokollierung, Persistenz, Transaktionen usw.) in Aspekte zerlegt und auf Domänenobjekte angewendet werden, ohne die Komplexität des Objektmodells von Domänenobjekten zu erhöhen.
IOC ermöglicht die Erstellung einer Anwendungsumgebung, die Objekte erstellen und diese Objekte dann an ihre kollaborierenden Objekte übergeben kann. Wie das Wort „Inversion“ andeutet, ist IOC wie umgekehrtes JNDI. Anstatt eine Reihe abstrakter Fabriken, Service-Locators, Singletons und eine direkte Konstruktion zu verwenden, wird jedes Objekt aus seinen kollaborierenden Objekten erstellt. Daher verwaltet der Container das Kollaborationsobjekt (Mitarbeiter).
Obwohl Spring ein AOP-Framework ist, ist es auch ein IOC-Container. Das Beste an Spring ist, dass es Ihnen beim Ersetzen von Objekten hilft. Fügen Sie mit Spring einfach Abhängigkeiten (kollaborierende Objekte) mithilfe von JavaBean-Eigenschaften und Konfigurationsdateien hinzu. Bei Bedarf ist es dann einfach, zusammenarbeitende Objekte durch ähnliche Schnittstellen zu ersetzen. }
Das Spring Framework ist eine mehrschichtige Architektur, die aus 7 genau definierten Modulen besteht. Spring-Module basieren auf dem Kerncontainer, der definiert, wie Beans erstellt, konfiguriert und verwaltet werden, wie in Abbildung 1 dargestellt.
Jedes Modul (oder jede Komponente), aus dem das Spring-Framework besteht, kann einzeln existieren oder in Verbindung mit einem oder mehreren anderen Modulen implementiert werden. Die Funktionen jedes Moduls sind wie folgt:
☆ Kerncontainer: Der Kerncontainer stellt die Grundfunktionen des Spring-Frameworks bereit. Die Hauptkomponente des Kerncontainers ist BeanFactory, die Implementierung des Factory-Musters. BeanFactory verwendet das Inversion of Control (IOC)-Muster, um die Konfigurations- und Abhängigkeitsspezifikationen der Anwendung vom eigentlichen Anwendungscode zu trennen.
☆ Spring-Kontext: Spring-Kontext ist eine Konfigurationsdatei, die Kontextinformationen für das Spring-Framework bereitstellt. Der Spring-Kontext umfasst Unternehmensdienste wie JNDI, EJB, E-Mail, Internationalisierung, Validierung und Versandfunktionen.
☆ Spring AOP: Durch Konfigurationsverwaltungsfunktionen integriert das Spring AOP-Modul aspektorientierte Programmierfunktionen direkt in das Spring-Framework. Daher ist es einfach, dafür zu sorgen, dass jedes vom Spring-Framework verwaltete Objekt AOP unterstützt. Das Spring AOP-Modul stellt Transaktionsverwaltungsdienste für Objekte in Spring-basierten Anwendungen bereit. Durch die Verwendung von Spring AOP können Sie die deklarative Transaktionsverwaltung in Ihre Anwendung integrieren, ohne auf EJB-Komponenten angewiesen zu sein.
☆ Spring DAO: Die JDBC DAO-Abstraktionsschicht bietet eine sinnvolle Ausnahmehierarchie, die zur Verwaltung der Ausnahmebehandlung und von Fehlermeldungen verschiedener Datenbankanbieter verwendet werden kann. Die Ausnahmehierarchie vereinfacht die Fehlerbehandlung und reduziert die Menge an Ausnahmecode, der geschrieben werden muss (z. B. Öffnen und Schließen von Verbindungen), erheblich. Die JDBC-orientierten Ausnahmen von Spring DAO folgen der allgemeinen DAO-Ausnahmehierarchie.
☆ Spring ORM: Das Spring-Framework fügt mehrere ORM-Frameworks ein, um objektrelationale ORM-Tools bereitzustellen, darunter JDO, Hibernate und iBatis SQL Map. Alle diese entsprechen der generischen Transaktions- und DAO-Ausnahmehierarchie von Spring.
☆ Spring Web-Modul: Das Web-Kontextmodul basiert auf dem Anwendungskontextmodul und stellt Kontext für webbasierte Anwendungen bereit. Daher unterstützt das Spring-Framework die Integration mit Jakarta Struts. Das Webmodul vereinfacht außerdem die Handhabung mehrteiliger Anfragen und die Bindung von Anfrageparametern an Domänenobjekte.
☆ Spring MVC-Framework: Das MVC-Framework ist eine voll funktionsfähige MVC-Implementierung zum Erstellen von Webanwendungen. Durch die Strategieschnittstelle wird das MVC-Framework hochgradig konfigurierbar und MVC unterstützt eine große Anzahl von Ansichtstechnologien, darunter JSP, Velocity, Tiles, iText und POI.
Die Funktionen des Spring Framework können auf jedem J2EE-Server verwendet werden und die meisten Funktionen eignen sich auch für nicht verwaltete Umgebungen. Der Kernpunkt von Spring besteht darin, wiederverwendbare Geschäfts- und Datenzugriffsobjekte zu unterstützen, die nicht an bestimmte J2EE-Dienste gebunden sind. Es besteht kein Zweifel, dass solche Objekte zwischen verschiedenen J2EE-Umgebungen (Web oder EJB), eigenständigen Anwendungen und Testumgebungen wiederverwendet werden können.
IOC und AOP
Das Grundkonzept des Inversion of Control-Musters (auch Abhängigkeitsintervention genannt) besteht darin, dass Sie keine Objekte erstellen, sondern beschreiben, wie sie erstellt werden. Es ist nicht direkt mit Objekten und Diensten im Code verbunden, aber welche Komponente welchen Dienst benötigt, ist in der Konfigurationsdatei beschrieben. Der Container (im Spring-Framework der IOC-Container) ist dafür verantwortlich, diese miteinander zu verknüpfen.
In einem typischen IOC-Szenario erstellt der Container alle Objekte und legt die erforderlichen Eigenschaften fest, um sie miteinander zu verbinden und zu entscheiden, wann Methoden aufgerufen werden. In der folgenden Tabelle ist ein Implementierungsmodus von IOC aufgeführt.
Der IOC-Container des Spring-Frameworks wird mit Typ 2 und Typ 3 implementiert.
Aspektorientierte Programmierung
Aspektorientierte Programmierung (AOP) ist eine Programmiertechnik, die es Programmierern ermöglicht, Verhaltensweisen zu modularisieren, die sich über Bedenken oder typische Verantwortungsbereiche erstrecken, wie etwa Protokollierung und Transaktionsverwaltung. Das Kernkonstrukt von AOP sind Aspekte, die Verhalten, das mehrere Klassen betrifft, in wiederverwendbaren Modulen kapseln.
AOP und IOC sind komplementäre Technologien, die einen modularen Ansatz zur Lösung komplexer Probleme bei der Entwicklung von Unternehmensanwendungen nutzen. In einem typischen objektorientierten Entwicklungsansatz können Protokollierungsanweisungen in allen Methoden und Java-Klassen platziert werden, um Protokollierungsfunktionen zu implementieren. Im AOP-Ansatz können Protokollierungsdienste wiederum modularisiert und deklarativ auf Komponenten angewendet werden, die eine Protokollierung erfordern. Der Vorteil besteht natürlich darin, dass die Java-Klasse weder die Existenz des Protokolldienstes kennen noch den zugehörigen Code berücksichtigen muss. Daher ist der in Spring AOP geschriebene Anwendungscode lose gekoppelt.
Die Funktionalität von AOP ist vollständig in den Kontext der Spring-Transaktionsverwaltung, Protokollierung und verschiedener anderer Funktionen integriert.
IOC-Container
Der Kern des Spring-Designs ist das Paket org.springframework.beans, das für die Verwendung mit JavaBean-Komponenten konzipiert ist. Dieses Paket wird normalerweise nicht direkt vom Benutzer verwendet, sondern vom Server als Low-Level-Vermittler für die meisten anderen Funktionen. Die nächsthöhere Abstraktionsebene ist die BeanFactory-Schnittstelle, die eine Implementierung des Factory-Entwurfsmusters ist und das Erstellen und Abrufen von Objekten nach Namen ermöglicht. BeanFactory kann auch Beziehungen zwischen Objekten verwalten.
BeanFactory unterstützt zwei Objektmodelle.
□ Das monomorphe Modell stellt eine gemeinsam genutzte Instanz eines Objekts mit einem bestimmten Namen bereit, der zum Zeitpunkt der Abfrage abgerufen werden kann. Singleton ist das standardmäßige und am häufigsten verwendete Objektmodell. Ideal für zustandslose Serviceobjekte.
□ Das Prototypenmodell stellt sicher, dass für jeden Abruf ein eigenes Objekt erstellt wird. Das Prototypmodell eignet sich am besten, wenn jeder Benutzer sein eigenes Objekt benötigt.
Das Konzept der Bohnenfabrik ist die Grundlage von Spring als IOC-Container. IOC überträgt die Verantwortung für die Handhabung der Dinge vom Anwendungscode auf das Framework. Wie ich im nächsten Beispiel zeigen werde, verwendet das Spring-Framework JavaBean-Eigenschaften und Konfigurationsdaten, um anzugeben, welche Abhängigkeiten festgelegt werden müssen.
BeanFactory-Schnittstelle
Da es sich bei org.springframework.beans.factory.BeanFactory um eine einfache Schnittstelle handelt, kann sie für verschiedene zugrunde liegende Speichermethoden implementiert werden. Die am häufigsten verwendete BeanFactory-Definition ist XmlBeanFactory, die Beans basierend auf Definitionen in einer XML-Datei lädt, wie in Listing 1 gezeigt.
Listing 1. XmlBeanFactory
BeanFactory Factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
In XML-Dateien definierte Beans werden passiv geladen, was bedeutet, dass das Bean selbst erst initialisiert wird, wenn es benötigt wird. Um eine Bean aus der BeanFactory abzurufen, rufen Sie einfach die Methode getBean() auf und übergeben dabei den Namen der abzurufenden Bean, wie in Listing 2 gezeigt.
Listing 2. getBean()
MyBean mybean = (MyBean) Factory.getBean("mybean");
Jede Bean-Definition kann ein POJO (definiert mit einem Klassennamen und JavaBean-Initialisierungseigenschaften) oder eine FactoryBean sein. Die FactoryBean-Schnittstelle fügt Anwendungen, die mit dem Spring-Framework erstellt wurden, eine Indirektionsebene hinzu.
IOC-Beispiel
Der einfachste Weg, die Umkehrung der Kontrolle zu verstehen, besteht darin, sie in Aktion zu sehen. Ich habe Teil 1 meiner dreiteiligen Spring-Serie mit einem Beispiel abgeschlossen, das zeigt, wie Sie die Abhängigkeiten Ihrer Anwendung über den Spring IOC-Container injizieren (anstatt sie einzubauen).
Als Ausgangspunkt diente mir der Anwendungsfall der Eröffnung eines Online-Guthabenkontos. Für diese Umsetzung erfordert die Eröffnung eines Guthabenkontos, dass der Benutzer mit den folgenden Diensten interagiert:
☆Bonitätsbewertungsdienst, Abfrage der Bonitätsinformationen des Benutzers.
☆ Remote-Nachrichtenverknüpfungsdienst zum Einfügen von Kundeninformationen und zum Verknüpfen von Kundeninformationen mit Kreditkarten- und Bankinformationen für die automatische Abbuchung (falls erforderlich).
☆ E-Mail-Dienst zum Versenden von E-Mails zum Kreditkartenstatus an Benutzer.
drei Schnittstellen
Für dieses Beispiel gehe ich davon aus, dass die Dienste bereits vorhanden sind, und integriere sie idealerweise lose gekoppelt. Die folgende Auflistung zeigt die APIs für die drei Dienste.
Listing 3. CreditRatingInterface
öffentliche Schnittstelle CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer);
}
Die in Listing 3 gezeigte Bonitätsbewertungsschnittstelle stellt Informationen zur Bonitätshistorie bereit. Es erfordert ein Customer-Objekt, das Kundeninformationen enthält. Die Implementierung dieser Schnittstelle wird von der CreditRating-Klasse bereitgestellt.
Listing 4. CreditLinkingInterface
öffentliche Schnittstelle CreditLinkingInterface {
öffentlicher String getUrl();
public void setUrl(String url);
public void linkCreditBankAccount() löst eine Ausnahme aus;
}
Die Kreditverknüpfungsschnittstelle verknüpft Bonitätsinformationen mit Bankinformationen (falls erforderlich) und fügt die Kreditkarteninformationen des Benutzers ein. Die Credit-Link-Schnittstelle ist ein Remote-Dienst und ihre Abfrage erfolgt über die Methode getUrl(). Die URL wird durch den Bean-Konfigurationsmechanismus des Spring-Frameworks festgelegt, auf den ich später noch eingehen werde. Die Implementierung dieser Schnittstelle wird von der CreditLinking-Klasse bereitgestellt.
Listing 5. EmailInterface
öffentliche Schnittstelle EmailInterface {
public void sendEmail(ICustomer iCustomer);
öffentlicher String getFromEmail();
public void setFromEmail(String fromEmail);
öffentlicher String getPassword();
public void setPassword(String-Passwort);
öffentlicher String getSmtpHost();
public void setSmtpHost(String smtpHost);
öffentlicher String getUserId() ;
public void setUserId(String userId);
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/loshu2003/archive/2009/12/31/5111344.aspx
-