Die Hauptforschung in diesem Artikel ist
Das Konzept von Lazy : Laden Sie nur ein Objekt, wenn es tatsächlich verwendet wird.
Die faule Strategie von Hibernate kann in:
1. Auf dem <klasse> -Tag kann der Wert genommen werden: TRUE/FALSE.
2. Auf dem Tag der <Spertation> kann der Wert genommen werden: TRUE/FALSCH, und das Klassenverbesserungstool ist erforderlich, um den Bytecode zu ändern (dies macht nicht viel Sinn).
3. Auf den Tags <Set> und <List> können die Werte genommen werden: True/False/Extra.
4. Zu den einzelnen Assoziations-Tags von <viele zu eins> und <Eins-zu-Eins-> können Sie den Wert erhalten: False/Proxy/Nophy
Werfen wir einen Blick auf das Faulpel auf dem Klassen -Tag:
User.java:
Public Class User {/ * ID */private int id;/ * Benutzername */privater Zeichenfolge Name;/ * Benutzerkennwort */private Zeichenfolge Passwort;/ * Erstellungszeit */private Datum CreateTime; // Setter- und Getter -Methoden auslassen}User.hbm.xml:
<? package="com.lixue.bean"> <!-- name of the class node represents the class name of the entity, and the table represents the name of the entity mapped to the table in the database --> <class name="User" table="t_user" lazy="true"> <id name="id"> <generator /> </id> <!-- Mapping normal properties--> <property name="name" /> <property name = "password" /> <Eigenschaft name = "createTime" /> < /class> < /hibernate-mapping>
Testmethode:
public void testload1 () {/*Benutzer, laden Sie sich selbst faulen Laden (das Klasse -Tag faule gilt für gewöhnliche Eigenschaften)*/user user = (user) hibernateutils.getSession (). Load (user.class, 1);/*Ausgibt SQL nicht. user.getId ());/* wird SQL ausgeben, da die Attribute zu diesem Zeitpunkt wirklich benötigt werden, die SQL -Anweisung ausgestellt wird und die ausgestellte Anweisung alle Attribute findet und die nachfolgenden Attribute nicht ausgeben werden. Name)*/system.out.println ("user.password =" + user.getPassword ());/*gibt SQL nicht aus (es wurde herausgefunden, wenn der Name überprüft wurde)*/system.out.println ("user.createTime =" + user.getCreateTime ();};};};}; Versuchen Sie einen Breakpoint bei User user = (User) HibernateUtils.getSession().load(User.class, 1); zum Testen!
Das Objekt wird im Objektbenutzer angezeigt-> Handler ---> Zielknoten, wie in der Abbildung gezeigt:
1. Am Anfang ist das Ziel null. Wenn user.getId() ausgeführt wird, ist es immer noch null, da die ID bereits angegeben ist, wenn wir abfragen, und zu diesem Zeitpunkt bedeutungslos ist, um abfragen zu können.
2. Beim Ausführen user.getName() wird eine Erklärung ausgestellt, wie in der Abbildung gezeigt:
Aus der Abbildung können wir sehen, dass beim Abfragen der ID keine Anweisung erteilt wurde. Wie wir gerade erwähnt haben, geben wir beim Abfragen des Namensattributs eine Anweisung aus, und die Funktion dieser Anweisung besteht darin, alle Attribute abzufragen.
3.. Wenn user.getPassword() und user.getCreateTime() ausgeführt werden, wird die Anweisung nicht mehr ausgestellt, da der Attributwert zuvor abfragt wurde.
HINWEIS: Lazy auf dem <klasse> -Tag unterstützt nur normale Attribute und wirkt sich nicht auf das Laden von Sammlungen in der Klasse aus.
Im obigen dreht sich alles um faul auf dem <klasse> Tag von Hibernate Lazy Loading. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!