1. Mappage de combinaison
La combinaison est un cas particulier de relations d'association et une relation avec le plus grand degré de couplage. L'objet principal et le sous-objet de la combinaison ont le même cycle de vie. Si l'objet principal meurt, le sous-objet mourra également. Ici, nous utilisons les employeurs et les utilisateurs comme exemples. Les utilisateurs et les employeurs ont des attributs d'informations de contact. Si vous pensez du point de vue d'un objet, vous dessinerez souvent le modèle d'objet dans une méthode de combinaison pour abstraction d'une classe d'informations de contact commune. Ensuite, les deux personnes incluent des objets de contact correspondants. Lorsque vous faites face au modèle d'objet correspondant, son exemple d'objet est illustré dans la figure ci-dessous:
Une fois que le modèle d'objet combiné a généré le modèle de relation correspondant, la sous-classe correspondante sera incluse dans la table principale, de sorte que la structure de table correspondante générera les attributs correspondants dans la table correspondante. La structure de table correspondante est la suivante:
1.1 Classe des employés et fichiers de cartographie
Dans le modèle d'objet, il existe une relation d'inclusion entre l'employé et le contact. Lorsque vous écrivez du code, vous devez inclure l'objet de contact dans l'employé. Le fichier de mappage correspondant doit également avoir un mappage des objets de contact. La balise <COMPONTER> doit être utilisée pour indiquer les objets combinés et ajouter les propriétés de l'objet à la balise d'objet.
Listing: employee.java. En plus des propriétés de base, le fichier de classe doit également être emballé avec des objets de contact car il existe une couche de relation d'inclusion entre eux.
package com.src.hibernate; Employé de classe publique {// numéro d'identification privé int id; public int getID () {return id; } public void setid (int id) {this.id = id; } // Nom du nom de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } // Contact Object Contact privé UserContact; Contact public getUserContact () {return userContact; } public void SetUserContact (contact userContact) {this.userContact = userContact; }}Listing 2: employee.hbm.xml, ajoutez le fichier de mappage correspondant. Les objets combinés mappés doivent être marqués avec <COMPONNENT> et ajouter les attributs d'objet correspondants à la balise. Le code spécifique est le suivant:
<? xml version = "1.0"?> <! Doctype Hibernate-Mapping Public "- // Hibernate / Hibernate Mapping Dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <Hibernate-Mapping> <CLASSE NAME = "com.src.hibern. table = "t_employee"> <id name = "id"> <générateur /> </ id> <propriété name = "name" /> <composant name = "EmployeContact"> <propriété name = "email" /> <propriété name = "Address"
1.2 Fichiers de classe d'utilisateurs et de configuration
Listing 3: user.java, sa structure de contenu est la même que celle de employee.java. Je ne dirai pas grand-chose sur les autres, regardez le code:
package com.src.hibernate; classe publique User {// numéro d'identification private int id; public int getID () {return id; } public void setid (int id) {this.id = id; } // Nom du nom de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } // Contact Object Contact privé UserContact; Contact public getUserContact () {return userContact; } public void SetUserContact (contact userContact) {this.userContact = userContact; }}Listing 4: user.hbm.xml, sa structure de contenu est la même que celle de Employee.hbm.xml, et elle est principalement utilisée pour l'utilisation de la balise <COMPONNENT>. C'est très simple et le code est le suivant:
<? xml version = "1.0"?> <! Doctype Hibernate-Mapping public "- // Hibernate / Hibernate Mapping Dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <Hernate-Mapping> <CLASSE NAME = "com.src.hiber.Uberner" table = "t_user"> <id name = "id"> <générateur / générateur /> </ id> <propriété name = "name" /> <composant name = "userontact"> <propriété name = "email" /> <propriété name = "adresse" /> </ component> </ classique> </ Hibernate name = "Contacttel" /> </ Component> </ Classe> </ Hibernate name = ContactTel "
1.3 CAPTAT.JAVA CLASSE
Il n'y a rien à faire attention dans ce fichier de classe. Vous pouvez ajouter des propriétés de base et vous n'avez pas besoin de configurer des mappages correspondants pour cette classe, donc son contenu est assez simple.
package com.src.hibernate; classe publique Contact {// Adresse e-mail Email de chaîne privée; String public getEmail () {return e-mail; } public void setEmail (chaîne e-mail) {this.email = e-mail; } // Adresse Adresse de chaîne privée; public String getAddress () {return adresse; } public void setAddress (adresse de chaîne) {this.address = adresse; } // Post Code Private String Zipcode; String public getzipcode () {return zipcode; } public void setzipcode (string zipcode) {this.zipcode = zipcode; } // Numéro de contact Private String ContactTel; String public getContactTel () {return ContactTel; } public void setContactTel (String ContactTel) {this.contacttel = contacttel; }} 1.4 Générer des résultats
Après la configuration du fichier ci-dessus, la structure de table de base de données correspondante peut être générée. L'instruction SQL générée est la suivante:
TABLE DE DROP Si existe T_Employee Drop Table Si existe t_User Créer la table T_Employee (ID INTEGER NON NULL AUTO_INCRAMENT, NAME VARchar (255), Email Varchar (255), Address Varchar (255), Zipcode VARCHAR (255), Email Varchar (255), adresse VARCHAR (255), Zipcode Varchar (255), Contacttel Varchar (255), clé primaire (ID))
La structure de la table de base de données générée est la suivante:
2. Fonctionnement des données
La structure du tableau obtenue en combinant le mappage est un tableau complet, de sorte que la méthode la plus originale peut être implémentée lors de l'écriture et de la lecture de données. Ici, nous utilisons également les méthodes de test utilisées dans les articles précédents pour écrire et lire des données, qui sont l'utilisation de méthodes de sauvegarde et de charge, voir ci-dessous pour des opérations spécifiques.
2.1 Insérer des données
Ici, l'utilisateur est utilisé comme exemple, et le fonctionnement d'écriture de l'employé est le même que celui de l'utilisateur. Lors de l'écriture de données, deux objets doivent être créés, l'un est l'objet de contact et l'autre est l'objet utilisateur. Lors de l'enregistrement, seul l'objet utilisateur doit être enregistré et l'objet de contact correspondant sera enregistré ensemble.
public void testsave1 () {// Déclare la session d'objet de session Session Session = NULL; essayez {// Obtenez la session d'objet de session = hibernateutils.getSession (); // Ouvre la session Session.beginTransaction (); // Créer le contact d'objet de connexion userContact = new Contact (); userontact.setAddress ("Beijing"); userontact.setContactTel ("1243435"); userontact.setemail ("[email protected]"); userontact.setzipcode ("zipcode"); // Créer l'objet utilisateur utilisateur utilisateur = new user (); user.setName ("Zhangsan"); User.SetUserContact (UserContact); session.save (utilisateur); // Soumettre session session.getTransaction (). Commit (); } catch (exception e) {e.printStackTrace (); session.getTransaction (). Rollback (); } enfin {hibernateUtils.closeSession (session); }} Instruction SQL générée:
Insérer dans T_User (nom, e-mail, adresse, Zipcode, ContactTel) VALEURS (?,?,?,?)
Vérifiez la structure du tableau comme suit:
2.2 Opération de lecture
Utilisant également l'utilisateur comme exemple, les opérations de l'employé sont les mêmes que l'objet utilisateur. L'opération de lecture est assez simple, le code est le suivant:
public void testload1 () {// Déclare la session d'objet de session Session Session = NULL; essayez {// Obtenez la session d'objet de session = hibernateutils.getSession (); // Ouvre la session Session.beginTransaction (); // Obtenez l'objet utilisateur utilisateur utilisateur = (utilisateur) session.load (user.class, 1); System.out.println ("Nom d'utilisateur:" + user.getName ()); // Soumettre la session Session.getTransaction (). Commit (); } catch (exception e) {e.printStackTrace (); session.getTransaction (). Rollback (); } enfin {hibernateUtils.closeSession (session); }}Les résultats correspondants sont générés comme suit:
HiberNate: sélectionnez user0_.id as id0_0_, user0_.name as name0_0_, user0_.email as e-mail0_0_, user0_.address en tant qu'adress0_0_, user0_.zipcode comme zipcode0_0_, user0_.contacttel as Contacttel0_0_ from t_user user0_ où user0_.id =? Nom d'utilisateur: Zhangsan
Iii. Exemples complets
Compte:
Le compte de classe publique implémente Serializable {private int id; Double argent privé; adresse privée; public int getID () {return id; } public void setid (int id) {this.id = id; } public double getMoney () {return money; } public void setmoney (double monnaie) {this.money = argent; } Adresse publique getAddress () {Adresse de retour; } public void setAddress (adresse d'adresse) {this.address = adresse; }} Adresse:
L'adresse de classe publique implémente Serializable {Private String Code; ville de cordes privée; Province privée de cordes; 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 = ville; } public String getProvince () {return province; } public void setProvince (String province) {this.province = province; }} Compte.hbm.xml:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Hibernate-Mapping Public "- // Hibernate / Hibernate Mapping DTD 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <! Outils -> <HiberNate-Mappred package = "pojo"> <class name = "Account" Table = "T_Account"> <id name = "id"> <colonnes name = "id"> </olumn> <enerator> </nerator> </ id> <propriété name = "Money"> <column name = "Money"> </ Column> </ propriété> <Component Name name = "code"> </ colonnel> </ propriété> <propriété name = "city"> <colonnelle name = "city"> </ colonnel> </ propriété> <propriété name = "province"> <colonnes name = "province"> </ column> </ propriété> </ composant> </ class> </ hibernate-mapping>