Wissen über Hibernate-Abfragen Zeit: 04.10.2009 07:14:25 Quelle: Internet Autor: Unbekannt Klicks: 146 Mal Stellen Sie zunächst den Unterschied zwischen den Methoden get() und load() vor:
Der Unterschied zwischen der get()-Methode und der load()-Methode liegt hauptsächlich in der Verwendung des Second-Level-Cache.
Die Methode „load()“ verwendet den Cache der zweiten Ebene, und die Methode „get()“ fragt die Datenbank direkt ab, wenn sie nicht im Cache der ersten Ebene gefunden wird, und sucht nicht im Cache der zweiten Ebene.
get(): Wenn Sie zum ersten Mal den Unterschied zwischen den Methoden get() und load() in der Datenbank vorstellen:
Der Unterschied zwischen der get()-Methode und der load()-Methode liegt hauptsächlich in der Verwendung des Second-Level-Cache.
Die Methode „load()“ verwendet den Cache der zweiten Ebene, und die Methode „get()“ fragt die Datenbank direkt ab, wenn sie nicht im Cache der ersten Ebene gefunden wird, und sucht nicht im Cache der zweiten Ebene.
get(): Wenn kein Datensatz in der Datenbank vorhanden ist, wird null zurückgegeben. get() gibt trotzdem Daten zurück.
Load(): Wenn kein Datensatz in der Datenbank vorhanden ist, wird eine Ausnahme ausgelöst. Wenn Daten vorhanden sind, wird ein Proxy-Objekt zurückgegeben.
Unterschied zwischen list- und iterator()-Methoden: (N+1?)
Wenn die list()-Methode ausgeführt wird, führt sie direkt die für die Abfrageergebnisse erforderlichen Abfrageanweisungen aus.
Die Methode iterator() führt zuerst die Abfrage aus, um die Objekt-ID zu erhalten, und ruft dann das abzufragende Objekt basierend auf jedem ID-Wert ab.
Deshalb: Bei Abfragen mit der Methode list() wird normalerweise nur eine SQL-Anweisung ausgeführt, während bei Abfragen mit der Methode iterator() möglicherweise N+1 SQL-Anweisungen ausgeführt werden müssen (N ist die Anzahl der Datensätze in der Ergebnismenge). ).
Ergebnismengen werden unterschiedlich verarbeitet:
Die Methode list() aktiviert alle Ergebnismengenobjekte auf einmal und initialisiert alle Ergebnismengenobjekte basierend auf den Abfrageergebnissen. Wenn die Ergebnismenge sehr groß ist, belegt sie viel Speicher und verursacht sogar einen Speicherüberlauf.
Die Methode iterator() initialisiert während der Ausführung nicht alle Objekte auf einmal, sondern initialisiert Objekte basierend auf dem Zugriff auf die Ergebnismenge. Sie können die Anzahl der Objekte im Cache während eines Zugriffs steuern, um zu vermeiden, dass zu viel Cache belegt wird und ein Speicherüberlauf entsteht.
HQL: HQL ist eine objektorientierte Abfragesprache. Die Betriebsobjekte von HQL sind Klassen, Instanzen, Attribute usw.
SQL: Die Operationsobjekte von SQL sind Datenobjekte wie Datentabellen und -spalten.
HQL ist eine vollständig objektorientierte Abfragesprache und kann daher Funktionen wie Vererbung und mehrere Elemente unterstützen.
Die HQL-Abfrage basiert auf der Query-Klasse und jede Query-Instanz entspricht einem Abfrageobjekt.
Die Funktion zum Festlegen von Parametern, die Abfrageschnittstelle, ist die eigentliche HQL-Abfrageschnittstelle.
//Erstelle ein Abfrageobjekt
Abfrage query = session.createQuery ("from Customer as c where c.name=:customerName and c.age=:customerAge");
//Dynamische Bindungsparameter
query.setString("Kundenname","Tom");
query.setInteger("customerAge",21);
//Führen Sie die Abfrageanweisung aus und geben Sie die Ergebnisse zurück
Listenergebnis = query.list();
HQL-Abfrageschritte:
1: Holen Sie sich das Hibernate-Sitzungsobjekt.
2: Schreiben Sie HQL-Anweisungen.
3: Verwenden Sie die HQL-Anweisung als Parameter, um die createQuery-Methode von Session aufzurufen und ein Abfrageobjekt zu erstellen.
4: Wenn die HQL-Anweisung Parameter enthält, rufen Sie die setXXX()-Methode von Query auf, um den Parametern Werte zuzuweisen.
5: Rufen Sie die Liste und andere Methoden des Query-Objekts auf, um die Abfrageergebnisse zu durchlaufen.
Query enthält außerdem zwei Methoden:
setFirstResult(int firstResult): Legen Sie den Datensatz fest, bei dem die zurückgegebene Ergebnismenge beginnt.
setMaxResults(int maxResults): Legen Sie die Anzahl der von dieser Abfrage zurückgegebenen Ergebnisse fest.
Löschen und Aktualisieren von Entitäten.
Projektionsabfrage: Nur einen Teil des Attributs abfragen.
Die Abfrage eines Attributs gibt eine Zeichenfolge zurück
Die Abfrage zweier Felder gibt ein Array zurück
Dynamisch erstellte Abfrage: Wird hauptsächlich für Dutzende Tabellenabfragen verwendet.
Um ein neues Objekt zu erstellen, fügen Sie einen Konstruktor hinzu;
Fügen Sie beim Erstellen eines neuen Objekts den Paketnamen hinzu
Verwenden Sie nicht count(*), sondern count(persistentes Objekt)
Gruppieren und Sortieren:
Die Order by-Klausel kann nach den Schlüsselwörtern asc oder desc sortiert werden
Zum Beispiel: form User u Order by u.name asc,u.age desc;
Group by-Klausel und statistische Abfrage:
Zum Beispiel: String hql = „select count(u),u.age from User u group by u.age with count(u)>10“;
Liste list = session.createQuery(hql).list();
Standard-SQL-Aggregatfunktionen können in HQL-Anweisungen verwendet werden, wie zum Beispiel: count(), sum(), max(), min(), age() usw.
Verbindungsabfrage:
Innerer Join: innerer Join
Linker äußerer Join: linker äußerer Join
Rechter äußerer Join: rechter äußerer Join
Vollständiger Join: Vollständiger Join (nicht häufig verwendet)
Dringender äußerer Join: Linker äußerer Join-Abruf, linker Join
Abrufen: Wird zum gleichzeitigen Abrufen von Verbindungsdaten, insbesondere Erfassungsdaten, verwendet. Reduzieren Sie die Anzahl der Interaktionen mit der Datenbank.
Ausgelassener Join: Verwenden Sie einen Outer-Join, um einen Outer-Join durchzuführen. Alle Datensätze in der linken Tabelle und die entsprechenden Datensatzinformationen der Auftragsklasse werden angezeigt.
Right-Out-Join: Genau das Gegenteil von Left-Out-Join. Right-Out-Join gibt alle Datensätze in der rechten Tabelle von HQL und die entsprechenden Kundenobjektdatensatzinformationen zurück.
Vier Möglichkeiten, Sammlungsdaten zu erhalten:
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().size();
3: Linke und rechte dringende Verbindung
4: Erweiterte Filter
Kriterienabfragen: Verwenden Sie Objekte, um Objektabfragen durchzuführen.
Die Hauptschnittstellen sind: Criteria-, Criterion-, expression_r- und Restrictions-Klassen. Möglichkeit zur Unterstützung der dynamischen Generierung von SQL-Anweisungen zur Laufzeit.
Bedingte Abfrageschritte:
1: Erstellen Sie ein Criteria-Objekt mit der CreateCriteria()-Methode von seesion
2: Legen Sie das Abfrageobjekt fest. Der Name bezieht sich auf das Attribut des Objekts
3: Abfragebedingungen zum Criteria-Objekt hinzufügen
4: Führen Sie die list()-Abfrage aus, um die Ergebnisse zurückzugeben.
Die bedingte Abfrage wird über drei Klassen abgeschlossen:
Kriterien: Stellt eine Abfrage dar.
Kriterium: Stellt eine Abfragebedingung dar.
Einschränkungen: Toolklasse zum Generieren von Abfragebedingungen.
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx