Dieser Artikel bietet Ihnen eine Einführung in den Second-Level-Cache und die Multi-Table-Abfrage. Ich hoffe, dass er für Sie hilfreich ist.
Sehen wir uns zwei Interviewfragen zu Hibernate an, dem Java-Framework. Dies ist ein allgemeiner Wissenspunkt über Hibernate.
1. Bitte stellen Sie den Second-Level-Cache von Hibernate vor
Beantworten Sie die Frage gemäß den folgenden Ideen:
(1) Erklären Sie zunächst klar, was ist Cache;
(2) Außerdem ist die Sitzung mit Ruhezustand der Cache der ersten Ebene. Das heißt, warum brauchen wir den Cache der zweiten Ebene? > (3) Lassen Sie uns abschließend darüber sprechen, wie Sie den Second-Level-Cache von Hibernate konfigurieren.
Der Cache dient dazu, Objekte, die aus der Datenbank abgefragt und verwendet wurden, im Speicher zu speichern (in einer Datenstruktur oder ähnlich einer Hashmap), wenn ein Objekt in Zukunft verwendet werden soll Fragen Sie zunächst ab, ob das Objekt im Cache vorhanden ist. Wenn nicht, fragen Sie die Datenbank ab und speichern Sie das abgefragte Objekt für die nächste Verwendung. Das Folgende ist der Pseudocode des Caches:
führt zum Cache der zweiten Ebene im Ruhezustand, und der folgende Pseudocode wird zur Analyse des Implementierungsprinzips des Caches verwendet.
Dao { hashmap map = new map(); User getUser(integer id) { User user = map.get(id) if(user == null) { user = session.get(id); map.put(id,user); } return user; } } Dao { Cache cache = null setCache(Cache cache) { this.cache = cache } User getUser(int id) { if(cache!=null) { User user = cache.get(id); if(user ==null) { user = session.get(id); cache.put(id,user); } return user; } return session.get(id); } }
Die Sitzung von Hibernate ist eine Art Cache. Wir nennen sie normalerweise den Cache der ersten Ebene. Wenn Sie die Sitzung zum Abfragen eines Objekts aus der Datenbank verwenden möchten, prüft die Sitzung zunächst, ob sie intern vorhanden ist Wenn ein Objekt vorhanden ist, wird es direkt zurückgegeben. Wenn es nicht vorhanden ist, greift es auf die Datenbank zu und speichert die Abfrageergebnisse intern. Da die Sitzung einen Sitzungsprozess darstellt und eine Sitzung mit einer Datenbankverbindung verknüpft ist, ist es am besten, die Sitzung nicht für längere Zeit offen zu halten. Sie wird normalerweise nur in einer Transaktion verwendet und sollte am Ende der Transaktion geschlossen werden. Und Session ist Thread-unsicher und anfällig für Probleme, wenn sie von mehreren Threads gemeinsam genutzt wird. Normalerweise ist nur der Cache im globalen Sinne die eigentliche Cache-Anwendung und hat einen größeren Cache-Wert. Daher ist die Cache-Funktion des Caches auf Sitzungsebene von Hibernate nicht offensichtlich und der Anwendungswert ist nicht groß. Der Cache der zweiten Ebene von Hibernate besteht darin, einen globalen Cache für Hibernate zu konfigurieren, sodass mehrere Threads und mehrere Transaktionen diesen Cache gemeinsam nutzen können. Wir hoffen, dass, sobald eine Person es verwendet hat, auch andere es nicht verwenden können.
Der Second-Level-Cache ist eine von Hibernate unabhängige Softwarekomponente und ein Produkt von Drittanbietern. Mehrere Anbieter und Organisationen bieten Caching-Produkte wie EHCache und OSCache usw. an. Um den Second-Level-Cache in Hibernate zu verwenden, müssen Sie zunächst in der Konfigurationsdatei hibernate.cfg.xml konfigurieren, welches Cache-Produkt des Herstellers verwendet werden soll. Anschließend müssen Sie die eigene Konfigurationsdatei des Cache-Produkts konfigurieren Objekte im Ruhezustand sollten in die Verwaltung des Second-Level-Cache einbezogen werden. Nachdem Sie das Prinzip des Second-Level-Cache verstanden und diese Idee verstanden haben, ist es einfach, den Second-Level-Cache von Hibernate zu konfigurieren.
Erweiterte Kenntnisse:Eine SessionFactory kann mit einem Second-Level-Cache verknüpft werden, d. h. ein Second-Level-Cache kann nur für das Zwischenspeichern von Daten in einer Datenbank verantwortlich sein, wenn die zweite von Hibernate verwendet wird Bitte beachten Sie, dass andere Anwendungen oder SessionFactory die Daten in der aktuellen Datenbank nicht ändern, sodass die zwischengespeicherten Daten nicht mit den tatsächlichen Daten in der Datenbank übereinstimmen. 2. Hibernate führt eine Mehrtabellenabfrage durch und übernimmt mehrere Felder aus jeder Tabelle. Das heißt, die Abfrageergebnismenge verfügt nicht über eine entsprechende Entitätsklasse.
Lösung eins: Nehmen Sie die Daten gemäß den Object[]-Daten heraus und bilden Sie dann selbst die Bean
Lösung zwei: Schreiben Sie einen Konstruktor für die Bean jeder Tabelle, zum Beispiel in Tabelle eins, Sie müssen Feld1 und Feld2 herausfinden, dann gibt es einen Konstruktor namens Bean (Typ1, Feld1, Typ2, Feld2), und dann kann diese Bean direkt in HQL generiert werden.
Das obige ist der detaillierte Inhalt vonEinführung in den Second-Level-Cache und die Multi-Table-Abfrage von Hibernate in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!