1. Kombinationskarte
Die Kombination ist ein Sonderfall von Assoziationsbeziehungen und eine Beziehung zu dem höchsten Grad der Kopplung. Das Hauptobjekt und das Unterobjekt der Kombination haben den gleichen Lebenszyklus. Wenn das Hauptobjekt stirbt, stirbt auch das Sub-Objekt. Hier verwenden wir Arbeitgeber und Benutzer als Beispiele. Sowohl Benutzer als auch Arbeitgeber haben Kontaktinformationsattribute. Wenn Sie aus der Perspektive eines Objekts denken, zeichnen Sie das Objektmodell häufig in eine Kombinationsmethode, um eine gemeinsame Kontaktinformationsklasse abstrahieren. Dann enthalten die beiden Personen entsprechende Kontaktinformationsobjekte. Wenn Sie sich dem entsprechenden Objektmodell gegenübersehen, ist sein Objektbeispiel in der folgenden Abbildung dargestellt:
Nachdem das kombinierte Objektmodell das entsprechende Beziehungsmodell generiert, wird die entsprechende Unterklasse in die Haupttabelle einbezogen, sodass die entsprechende Tabellenstruktur die entsprechenden Attribute in die entsprechende Tabelle generiert. Die entsprechende Tabellenstruktur lautet wie folgt:
1.1 Mitarbeiterklassen- und Mapping -Dateien
Im Objektmodell gibt es eine Einschlussbeziehung zwischen Mitarbeiterin und Kontakt. Beim Schreiben von Code müssen Sie das Kontaktobjekt in den Mitarbeiter einbeziehen. Die entsprechende Zuordnungsdatei muss auch eine Zuordnung von Kontaktobjekten haben. Das <komponenten> -Tag muss verwendet werden, um die kombinierten Objekte anzuzeigen und die Objekteigenschaften zum Objekt -Tag hinzuzufügen.
Listing: Mitarbeiter.java. Zusätzlich zu den grundlegenden Eigenschaften muss die Klassendatei auch mit Kontaktobjekten verpackt werden, da zwischen ihnen eine Einschlussschicht besteht.
Paket com.src.hibernate; public class Mitarbeiter {// id nummer private int id; public int getid () {return id; } public void setId (int id) {this.id = id; } // Name des privaten String -Namens; public String getName () {return name; } public void setName (String -Name) {this.name = name; } // Contact Object Private Kontakt UserContact; public contact getuSercontact () {return usercontact; } public void setUSerContact (Kontakt usercontact) {this.usercontact = userContact; }}Listing 2: Mitarbeiter.hbm.xml, fügen Sie die entsprechende Zuordnungsdatei hinzu. Die zugeordneten Kombinationsobjekte sollten mit <komponenten> markiert und den entsprechenden Objektattributen zum Tag hinzugefügt werden. Der spezifische Code lautet wie folgt:
<? table = "t_workee"> <id name = "id"> <generator/> </id> <Eigenschaft name = "name"/> <component name = "peopeeContact"> <Eigenschaft name = "E-Mail"/> <Eigenschaft name = "adress"/> <Eigenschaft Name = "
1.2 Benutzerklassen- und Konfigurationsdateien
Listing 3: user.java, seine Inhaltsstruktur entspricht der von Employee.java. Ich werde nicht viel über die anderen sagen, schauen Sie sich den Code an:
Paket com.src.hibernate; public class user {// id nummer private int id; public int getid () {return id; } public void setId (int id) {this.id = id; } // Name des privaten String -Namens; public String getName () {return name; } public void setName (String -Name) {this.name = name; } // Contact Object Private Kontakt UserContact; public contact getuSercontact () {return usercontact; } public void setUSerContact (Kontakt usercontact) {this.usercontact = userContact; }}Listing 4: user.hbm.xml, seine Inhaltsstruktur entspricht der von Mitarbeiter.hbm.xml und wird hauptsächlich für die Verwendung des <komponenten> -Tags verwendet. Es ist sehr einfach und der Code ist wie folgt:
<? table = "t_user"> <id name = "id"> <generator/generator/> </id> <Eigenschaft name = "name"/> <component name = "usercontact"> <Eigenschaft name = "E-Mail"/> <Eigenschaft name = "Adresse"/> <Eigenschaft name = "
1.3 Kontakt.java -Klasse
In dieser Klassendatei gibt es nichts zu beachten. Sie können grundlegende Eigenschaften hinzufügen und müssen entsprechende Zuordnungen für diese Klasse nicht konfigurieren, sodass der Inhalt ganz einfach ist.
Paket com.src.hibernate; öffentliche Klasse Contact {// E -Mail -Adresse private Zeichenfolge E -Mail; public String getemail () {E -Mail zurücksenden; } public void setemail (String -E -Mail) {this.email = E -Mail; } // Adresse private String -Adresse; public String getAddress () {Renditeadresse; } public void setAddress (String -Adresse) {this.address = address; } // POST CODE Private String Zipcode; public String geteizipcode () {return zipcode; } public void detzipCode (String zipcode) {this.zipcode = zipcode; } // Kontaktnummer private Zeichenfolge contactTel; public String getContactTel () {return contactTel; } public void setContactTel (String contactTel) {this.contactTel = contactTel; }} 1.4 Ergebnisse erzeugen
Nach der obigen Dateikonfiguration kann die entsprechende Datenbanktabellenstruktur generiert werden. Die generierte SQL -Anweisung lautet wie folgt:
Droptabelle Wenn existiert T_EMPOTEE DROP -TABELLE, wenn existt t_user erstellen table T_OPPLICEE (ID Integer nicht null auto_increment, Name varchar (255), E -Mail -Varchar (255), Adress varchar (255), Zipcode varchar (255), ContactTel Varchar (255), Primärschlüssel (ID) Erstellen von Tabelle (id Ingorch) (id Ingor -null NULL NULL NULLE, NACH TABLE, TABLE TABLE TABLE TABLE CREATE TABLE (IDGEER Varchar (255), E -Mail Varchar (255), Adressvarchar (255), Zipcode Varchar (255), ContactTel Varchar (255), Primärschlüssel (ID))
Die generierte Datenbanktabellenstruktur lautet wie folgt:
2. Datenbetrieb
Die durch Kombination der Zuordnung erhaltene Tabellenstruktur ist eine vollständige Tabelle, daher kann die ursprüngliche Methode beim Schreiben und Lesen von Daten implementiert werden. Hier verwenden wir auch die in den vorherigen Artikeln verwendeten Testmethoden zum Schreiben und Lesen von Daten, bei denen die Verwendung von Speichern und Lademethoden verwendet werden. Weitere Informationen finden Sie im Folgenden.
2.1 Daten einfügen
Hier wird der Benutzer als Beispiel verwendet, und der Schreibbetrieb des Mitarbeiters ist der gleiche wie der des Benutzers. Beim Schreiben von Daten müssen zwei Objekte erstellt werden, eines ist das Kontaktobjekt und das andere das Benutzerobjekt. Beim Speichern muss nur das Benutzerobjekt gespeichert werden, und das entsprechende Kontaktobjekt wird zusammen gespeichert.
public void testsave1 () {// deklarieren Sie die Sitzungsobjekt -Sitzung Session = null; Versuchen Sie {// Die Sitzungsobjekt -Sitzung = hibernateUtils.getSession () erhalten; // öffnen Sie die Sitzungssitzung.BeginTransaction (); // Erstellen Sie das Verbindungsobjekt -Kontakt Usercontact = new contact (); usercontact.setAddress ("peking"); userContact.SetContacttel ("1243435"); usercontact.setemail ("[email protected]"); userContact.setzipcode ("Zipcode"); // Erstellen Sie den Benutzerobjekt -Benutzer user = new user (); user.setName ("Zhangsan"); user.SetUserContact (userContact); Session.save (Benutzer); // Sitzungssitzung einreichen. } catch (Ausnahme e) {e.printstacktrace (); Session.Gettransaction (). Rollback (); } endlich {HibernateUtils.Closession (Sitzung); }} Generierte SQL -Anweisung:
Einfügen in T_USER (Name, E -Mail, Adresse, Zipcode, ContactTel) Werte (?,?,?,?,?)
Überprüfen Sie die Tabellenstruktur wie folgt:
2.2 Betrieb lesen
Verwenden Sie auch den Benutzer als Beispiel, so sind die Operationen des Mitarbeiters mit dem Benutzerobjekt die gleichen. Der Lesevorgang ist recht einfach, der Code lautet wie folgt:
public void testload1 () {// deklarieren Sie die Sitzungsobjektsitzung Session = NULL; Versuchen Sie {// Die Sitzungsobjekt -Sitzung = hibernateUtils.getSession () erhalten; // öffnen Sie die Sitzungssitzung.BeginTransaction (); // Die Benutzerobjekt -Objekt user user = (Benutzer-) Sitzung (user.class, 1) erhalten; System.out.println ("Benutzername:"+user.getName ()); // Senden Sie die Sitzungssitzung. } catch (Ausnahme e) {e.printstacktrace (); Session.Gettransaction (). Rollback (); } endlich {HibernateUtils.Closession (Sitzung); }}Die entsprechenden Ergebnisse werden wie folgt erzeugt:
Hibernate: Wählen Sie user0_.id as id0_0_, user0_.name als name0_0_, user0_.email als E -Mail0_0_, user0_.address als addres0_0_, user0_.zipcode as Zipcode0_0_, user0_.contactel ascontTel0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_N -Ehren oder user0_ -user0_.? Benutzername: Zhangsan
III. Umfassende Beispiele
Konto:
öffentliches Klassenkonto implementiert serialisierbare {private int id; privates Doppelgeld; private Adressadresse; public int getid () {return id; } public void setId (int id) {this.id = id; } public double getMoney () {Return Money; } public void setMoney (doppeltes Geld) {this.money = Geld; } öffentliche Adresse getAddress () {Rückgabeadresse; } public void setAddress (Adressadresse) {this.address = address; }} Adresse:
Die Adresse der öffentlichen Klasse implementiert serialisierbare {private String -Code; private Streichstadt; private String -Provinz; public String getCode () {return code; } public void setCode (String -Code) {this.code = code; } public String getCity () {return city; } public void setCity (String City) {this.city = City; } public String getProvince () {return provinz; } public void setProvince (String -Provinz) {this.province = provinz; }} Account.hbm.xml:
<? Tools-> <Hibernate-Mapping Package = "Pojo"> <class name = "account" table = "t_account"> <id name = "id"> <columnname = "id"> </column> <generator> </generator> </id> <Property name = "Money"> <columnname = "assoderat name = "code"> </column> </Property> <Eigenschaft name = "City"> <columnname = "City"> </column> </property> <Eigenschaft name = "provinz"> <columnname = "province"> </column> </property> </component> </class> </hibernate-mapping>