91, was ist ORM?
(Weitere Empfehlungen für verwandte Interviewfragen: Java-Interviewfragen und -antworten)
Object-Relational Mapping (kurz ORM) ist eine Methode zur Lösung der Diskrepanz zwischen dem objektorientierten Modell des Programms und dem relationalen Modell des Datenbank. Einfach ausgedrückt speichert ORM Objekte im Programm automatisch in einer relationalen Datenbank oder in einer relationalen Datenbank, indem es Metadaten verwendet, die die Zuordnung zwischen Objekten und Datenbanken beschreiben (XML oder Anmerkungen können in Java verwendet werden). in einer relationalen Datenbanktabelle in Java-Objekte konvertiert im Wesentlichen Daten von einer Form in eine andere.
92. Ist SessionFactory im Ruhezustand threadsicher? Ist die Sitzung threadsicher (können zwei Threads dieselbe Sitzung gemeinsam nutzen)?
SessionFactory entspricht einem Datenspeicherkonzept von Hibernate. Es ist threadsicher und kann von mehreren Threads gleichzeitig aufgerufen werden. SessionFactory wird im Allgemeinen nur beim Start erstellt. Für Anwendungen ist es am besten, SessionFactory im Singleton-Modus zu kapseln, um den Zugriff zu erleichtern.
Session ist ein leichtes, nicht threadsicheres Objekt (Sitzung kann nicht zwischen Threads geteilt werden), das eine Arbeitseinheit darstellt, die mit der Datenbank interagiert. Die Sitzung wird von SessionFactory erstellt und nach Abschluss der Aufgabe geschlossen. Die Sitzung ist die Hauptschnittstelle, die vom Persistenzschichtdienst bereitgestellt wird.
Session verzögert den Erhalt der Datenbankverbindung (d. h. sie wird nur bei Bedarf abgerufen). Um zu vermeiden, dass zu viele Sitzungen erstellt werden, können Sie ThreadLocal verwenden, um die Sitzung an den aktuellen Thread zu binden, sodass derselbe Thread immer dieselbe Sitzung erhält. Die getCurrentSession()-Methode von SessionFactory in Hibernate 3 kann dies tun.
93. Was sind die Methoden save(), update(), merge(), lock(), saveOrUpdate() und persist() von Session? Was ist der Unterschied?
Hibernate-Objekte haben drei Zustände: vorübergehend, dauerhaft und getrennt.例 Die Instanz des Instant-Status kann durch Aufrufen von Save (), Persist () oder SaveorUpdate () geändert werden. save() und persist() lösen SQL INSERT-Anweisungen aus, und update() oder merge() lösen UPDATE-Anweisungen aus.
Der Unterschied zwischen save() und update() besteht darin, dass das eine ein transientes Objekt in einen dauerhaften Zustand versetzt und das andere ein freies Objekt in einen dauerhaften Zustand. Die Methode merge() kann die Funktionen der Methoden save() und update() vervollständigen. Ihre Absicht besteht darin, den neuen Status mit dem vorhandenen persistenten Objekt zusammenzuführen oder ein neues persistentes Objekt zu erstellen. (Für die Persist()-Methode laut offizieller Dokumentation:
1. Persist()-Methode zum Beibehalten einer Instanz einer Instanz, sie garantiert jedoch nicht, dass der Bezeichner sofort in die persistente Instanz eingefügt wird. Das Ausfüllen kann verschoben werden zur Flush-Zeit;
2. Die persist()-Methode stellt sicher, dass sie keine INSERT-Anweisung auslöst, wenn ein langer Sitzungsprozess gekapselt werden muss ;
3. Die Methode save() garantiert nicht Punkt 2. Sie gibt den Bezeichner zurück, sodass die INSERT-Anweisung sofort ausgeführt wird, egal ob innerhalb oder außerhalb der Transaktion. Was den Unterschied zwischen der Methode lock() und der Methode update() betrifft, so verwandelt die Methode update() ein Objekt in einen getrennten Zustand, der in einen dauerhaften Zustand geändert wurde das hat sich nicht in einen dauerhaften Zustand geändert.
94 erklärt den Prozess des Ladens von Entitätsobjekten nach Sitzung.
1. Bevor die Datenbankabfragefunktion aufgerufen wird, durchsucht die Sitzung zunächst den Entitätstyp und den Primärschlüssel im Cache der ersten Ebene. Wenn die Cache-Suche der ersten Ebene erfolgreich ist, wird direkt zurückgegeben
2. Wenn der Cache der ersten Ebene nicht erreicht, sucht die Sitzung im aktuellen NonExists-Datensatz (entspricht einer Abfrage-Blacklist. Wenn wiederholt ungültige Abfragen auftreten, kann eine schnelle Beurteilung vorgenommen werden, um die Leistung zu verbessern). Abfragebedingung existiert in NonExists, null wird zurückgegeben;
Kann direkt zurückgegeben werden, wenn die Abfrage des Second-Level-Cache den Second-Level-Cache nicht abfragt und null zurückgibt Erstellen Sie gemäß der Zuordnungskonfiguration und der SQL-Anweisung das entsprechende Entitätsobjekt. 6. Integrieren Sie das Objekt in die Verwaltung der Sitzung (Level 1-Cache). 7. Wenn ein entsprechender Interceptor vorhanden ist, führen Sie die onLoad-Methode aus Interceptor;
8. Wenn es aktiviert und auf die Verwendung des Second-Level-Cache eingestellt ist, wird das Datenobjekt in den Second-Level-Cache aufgenommen. 9. Das Datenobjekt zurückgeben.
95, was ist der Unterschied zwischen der Verwendung von # und $ zum Schreiben von Platzhaltern in MyBatis?数据#Als Zeichenfolge werden die übergebenen Daten automatisch zu den übergebenen Daten hinzugefügt
$ zeigt die übertragenen Daten direkt an, um sie in SQL zu generieren.
96, Erklären Sie die Rolle des Namespace in MyBatis.
Java-Kurs
)
97 Was bedeutet dynamisches SQL in MyBatis?
- if – select / when / else – trim – where – set – foreach Anwendungsbeispiel:
98, was sind die Mängel der JDBC-Programmierung und wie löst MyBatis diese Probleme?
MyBatis: Konfigurieren Sie den Datenverbindungspool in SqlMapConfig.xml und verwenden Sie den Verbindungspool zum Verwalten von Datenbankverbindungen.
2. JDBC: SQL-Anweisungen werden in den Code geschrieben, was die Wartung des Codes erschwert. Die tatsächliche Anwendung von SQL kann sich stark ändern, und SQL-Änderungen erfordern Änderungen am Java-Code.
MyBatis: Konfigurieren Sie die SQL-Anweisung in der Datei XXXXmapper.xml und trennen Sie sie vom Java-Code.
3. JDBC: Es ist mühsam, Parameter an die SQL-Anweisung zu übergeben, da die Where-Bedingung der SQL-Anweisung nicht unbedingt sicher ist, sie kann mehr oder weniger sein und die Platzhalter müssen den Parametern eins zu eins entsprechen .
MyBatis: Mybatis ordnet Java-Objekte automatisch SQL-Anweisungen zu.
4. JDBC: Es ist mühsam, die Ergebnismenge zu analysieren. SQL-Änderungen führen zu Änderungen im Parsing-Code und müssen vor dem Parsen durchlaufen werden. Es wäre bequemer, die Datenbankdatensätze in Pojo-Objekte zu analysieren.
MyBatis: Mybatis ordnet SQL-Ausführungsergebnisse automatisch Java-Objekten zu.
99, Was sind die Unterschiede zwischen MyBatis und Hibernate?
1. Mybatis unterscheidet sich von Hibernate. Es handelt sich nicht vollständig um ein ORM-Framework, da MyBatis von Programmierern verlangt, SQL-Anweisungen selbst zu schreiben. Mybatis kann die SQL-Anweisungen jedoch flexibel für die Ausführung über XML oder Anmerkungen konfigurieren und Java-Objekte kombinieren Durch die Zuordnung wird das endgültig ausgeführte SQL generiert, und schließlich wird das Ergebnis der SQL-Ausführung zugeordnet, um ein Java-Objekt zu generieren.
2. Mybatis hat eine niedrige Lernschwelle und ist leicht zu erlernen. Es ist sehr flexibel und eignet sich sehr gut für die Softwareentwicklung, die keine hohen Anforderungen an relationale Daten stellt Da sich die Anforderungen dieser Art von Software häufig ändern, müssen die Ergebnisse schnell ausgegeben werden, sobald sich die Anforderungen ändern. Die Voraussetzung für Flexibilität ist jedoch, dass Mybatis nicht datenbankunabhängig sein kann. Wenn Sie Software implementieren müssen, die mehrere Datenbanken unterstützt, müssen Sie mehrere Sätze von SQL-Zuordnungsdateien anpassen, was eine hohe Arbeitsbelastung darstellt. 3. Hibernate verfügt über starke Objekt-/Relational-Mapping-Funktionen und eine gute Datenbankunabhängigkeit. Bei Software mit hohen Anforderungen an relationale Modelle (z. B. kundenspezifische Software mit festen Anforderungen) können Sie viel sparen, wenn Sie Hibernate zur Entwicklung verwenden des Codes und verbessern die Effizienz. Der Nachteil von Hibernate besteht jedoch darin, dass die Schwelle zum Lernen hoch und die Schwelle zur Beherrschung noch höher ist. Darüber hinaus ist es erforderlich, die O/R-Zuordnung zu entwerfen, die Leistung und das Objektmodell abzuwägen und Hibernate gut zu verwenden starke Erfahrung und Fähigkeit. 的 Kurz gesagt: Solange die Anforderungen des Benutzers in einer Umgebung mit begrenzten Ressourcen erfüllt werden können, ist eine Softwarearchitektur mit guter Wartung und guter Skalierbarkeit eine gute Architektur, sodass das Framework nur für Frameworks geeignet ist.
Empfohlene verwandte Tutorials:
Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews——(8). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!