Heim  >  Artikel  >  Java  >  Interviewfragen zur Java-Persistenzschicht (1)

Interviewfragen zur Java-Persistenzschicht (1)

王林
王林nach vorne
2020-03-14 17:45:222215Durchsuche

Interviewfragen zur Java-Persistenzschicht (1)

1. Was ist ORM?

Object-Relational Mapping (ORM) ist eine Technologie zur Lösung des Problems der Nichtübereinstimmung zwischen dem objektorientierten Modell des Programms und dem relationalen Modell der Datenbank; Mit anderen Worten: ORM speichert die Objekte im Programm automatisch in der relationalen Datenbank oder konvertiert die Zeilen in der relationalen Datenbanktabelle mithilfe von Metadaten, die die Zuordnung zwischen dem Objekt und der Datenbank beschreiben (XML oder Anmerkungen können in Java verwendet werden). Java-Objekt, das im Wesentlichen Daten von einer Form in eine andere konvertiert.

2. 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.

(Lernvideo-Empfehlung:

Java-Video-Tutorial

) Sitzung ist ein leichtes, nicht threadsicheres Objekt (Sitzung kann nicht zwischen Threads geteilt werden), das die Verbindung darstellt mit der Datenbank Eine Arbeitseinheit, die mit interagiert. Die Sitzung wird von SessionFactory erstellt und nach Abschluss der Aufgabe geschlossen. Die Sitzung ist die Hauptschnittstelle, die vom Persistenzschichtdienst bereitgestellt wird.

Die Sitzung verzögert den Erhalt der Datenbankverbindung (d. h. sie wird nur bei Bedarf hergestellt). 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.

3. Was bewirken 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.

Transiente Instanzen können durch Aufruf von save(), persist() oder saveOrUpdate() dauerhaft gemacht werden.

Freie Instanzen können durch Aufruf von update(), saveOrUpdate(), lock() dauerhaft gemacht werden. ) oder Replicate() wird persistent. 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 eines ein transientes Objekt in einen dauerhaften Zustand und das andere ein freies Objekt in einen dauerhaften Zustand umwandelt. 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.

Befolgen Sie für die Methode persist() die Anweisungen in der offiziellen Dokumentation:

1 Die Methode persist() behält eine vorübergehende Instanz bei, garantiert jedoch nicht, dass der Bezeichner gefüllt wird In einer persistenten Instanz kann das Ausfüllen des Bezeichners bis zum Flush-Zeitpunkt verschoben werden. 2. Die Methode persist() stellt sicher, dass sie keine INSERT-Anweisung auslöst, wenn sie außerhalb einer Transaktion aufgerufen wird . Bei Bedarf ist die Methode persist() erforderlich (Empfohlenes Tutorial:

Java Quick Start

)

3 Punkt 2 ist nicht garantiert, er gibt den Bezeichner zurück und führt daher die INSERT-Anweisung sofort aus, 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.

4. Erklären Sie den Prozess des Ladens von Entitätsobjekten in Session

1 Bevor Sie die Datenbankabfragefunktion aufrufen, verwendet Session zunächst den Entitätstyp und den Primärschlüssel in Suche im Cache der ersten Ebene: Wenn die Suche im Cache der ersten Ebene einen Treffer ergibt und der Datenstatus zulässig ist, wird die Sitzung direkt aufgezeichnet die aktuellen NonExists (entspricht einer Abfrage-Blacklist, wenn wiederholte ungültige Abfragen schnell beurteilt werden können, wodurch die Leistung verbessert wird. Wenn die gleiche Abfragebedingung in NonExists vorhanden ist, wird null zurückgegeben.) Die Cache-Abfrage der zweiten Ebene schlägt fehl. Wenn der Cache der zweiten Ebene zutrifft, wird die SQL-Anweisung zurückgegeben Wenn die Abfrage den entsprechenden Datensatz nicht findet, wird die Abfrage zu den NonExists der Sitzung hinzugefügt und gibt null zurück.

5 Rufen Sie das ResultSet gemäß der Zuordnungskonfiguration und der SQL-Anweisung ab und erstellen Sie es das entsprechende Entitätsobjekt; 6. Integrieren Sie das Objekt in die Verwaltung der Sitzung (Level 1-Cache);

8. Wenn es aktiviert und auf die Verwendung des Second-Level-Cache eingestellt ist, wird das Datenobjekt in den Second-Level-Cache aufgenommen.

9.

5. Was ist der Unterschied zwischen der Verwendung von # und $ zum Schreiben von Platzhaltern in MyBatis?

# Behandeln Sie die eingehenden Daten als Zeichenfolge und fügen Sie den eingehenden Daten automatisch Anführungszeichen hinzu

$ zeigt die eingehenden Daten direkt in SQL an und generiert sie.

Hinweis: Die Verwendung des Platzhalters $ kann zu SQL-Injection-Angriffen führen. Verwenden Sie nicht $, wenn # verwendet werden kann, wenn Sie die Order-By-Klausel schreiben.

Verwandte Tutorial-Empfehlungen: Java-Interviewfragen

Das obige ist der detaillierte Inhalt vonInterviewfragen zur Java-Persistenzschicht (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen