Ensemble
Un ensemble de collection est une collection Java qui ne contient aucun éléments en double. Plus formellement, SET ne contient aucun éléments sur E1 et E2, tel que E1.Equals (E2), et tout au plus un élément vide. Ainsi, être ajouté à un ensemble d'objets doit implémenter Equals () et HashCode () afin que Java puisse déterminer si deux éléments / objets sont les mêmes.
Les ensembles sont mappés sur les éléments <set> de la table de carte et sont initialisés dans java.util.hashset. Vous pouvez utiliser des collections SET pour avoir des éléments de la collection qui n'ont pas besoin d'être répétés lors de l'utilisation de la classe.
Définir le Tableau SGBDR:
Considérez un cas où nous avons besoin de stocker nos dossiers d'employés dans le tableau des employés, avec la structure suivante:
Créer un employé de table (id int not null auto_increment, first_name varchar (20) par défaut null, last_name varchar (20) par défaut null, salaire int null, clé primaire (id));
En outre, il est supposé que chaque employé peut avoir un ou plusieurs certificats liés à lui. Par conséquent, nous stockons les informations pertinentes du certificat dans un tableau séparé avec la structure suivante:
Créer un certificat de table (id int not null auto_increment, certificate_name varchar (30) par défaut null, employee_id int défaut null, clé primaire (id));
Il y aura une relation entre un employé à plusieurs et un objet de certificat:
Définir la classe Pojo:
Mettons en œuvre notre personnel de classe Pojo sera utilisé pour contenir une collection d'objets dans la table des employés et des variables d'ensemble accréditées.
import Java.util. *; Employé de classe publique {private int id; String privé FirstName; String privé LastName; Salaire int privé; certificats de jeu privé; Employee public () {} Public Employee (String fname, String lname, int salaire) {this.firstName = fname; this.lastName = lname; this.salary = salaire; } public int getID () {return id; } public void setid (int id) {this.id = id; } public String getFirstName () {return firstName; } public void setFirstName (String first_name) {this.firstname = first_name; } public String getLastName () {return lastName; } public void setLastName (string last_name) {this.lastname = last_name; } public int getSalary () {return salaire; } public void setsalary (int salaire) {this.salary = salaire; } public set getCertificates () {return Certificates; } public void setCertificates (set certificats) {this.certificates = certificats; }} Définissons maintenant le certificat d'une autre classe POJO correspondant au tableau, un tel objet de certificat peut stocker et récupérer le tableau de certificat. Cette classe doit également implémenter les méthodes equals () et hashcode () en même temps, afin que Java puisse déterminer si deux éléments / objets sont les mêmes.
Certificat de classe publique {private int id; nom de chaîne privé; Certificat public () {} Certificat public (nom de chaîne) {this.name = name; } public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public booléen égaux (objet obj) {if (obj == null) return false; if (! this.getClass (). equals (obj.getClass ())) renvoie false; Certificat obj2 = (certificat) obj; if ((this.id == obj2.getId ()) && (this.name.equals (obj2.getName ()))) {return true; } return false; } public int hashcode () {int tmp = 0; tmp = (id + name) .hashcode (); retour tmp; }} Définissez le fichier de mappage Hibernate:
Développer un fichier de mappage qui spécifie comment Hibernate définit un fichier de mappage qui mappe dans une table de base de données. L'élément <Set> sera utilisé pour définir les règles utilisées pour définir la collection.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Hibernate-Mapping Public "- // Hibernate / Hibernate Mapping Dtd // en" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> table = "Employee"> <meta attribut = "class-description"> Cette classe contient le détail des employés. </ meta> <id name = "id" type = "int" chronn = "id"> <générateur /> </ id> <set name = "certificats" cascade = "all"> <key column = "Employee_id" /> <one-to-that type = "string" /> <propriété name = "salaire" chronn = "salaire" type = "int" /> </ class> <class name = "Certificate" table = "Certificate"> <meta attribute = "class-description"> Cette classe contient les enregistrements de certificat. </ meta> <id name = "id" type = "int" chronn = "id"> <générateur /> </ id> <propriété name = "name" colonnen = "certificate_name" type = "string" /> </ class> </ hibernate-mapping>
Le format <classname> .hbm.xml dans le fichier de mappage qui doit être enregistré. Enregistrez le fichier employee.hbm.xml dans le fichier de mappage. Déjà familier avec la plupart des détails de cartographie, cartographier tous les éléments du fichier:
Un document mappé est un document XML avec <Hibernate-Mapping> en tant qu'élément racine correspondant à chaque classe contenant 2 <classe>.
L'élément <scons> est utilisé pour définir un mappage spécifique de la table de base de données à partir d'une classe Java. Le nom de la classe Java spécifie l'attribut de nom de l'élément de classe et la base de données d'attribut de table Nom de la table Spécifie.
L'élément <Meta> est un élément facultatif qui peut être utilisé pour créer une description de la classe.
L'élément <id> mappe l'attribut ID unique dans la classe à la clé principale de la table de base de données. L'attribut de nom de l'élément ID fait référence à la classe de l'attribut et l'attribut de colonne fait référence aux colonnes de la table de base de données. L'attribut de type enregistre le type de mappage Hibernate, qui sera converti de Java en type de données SQL.
L'élément <générateur> dans l'élément ID est utilisé pour générer automatiquement la valeur de clé primaire. Définissez l'attribut de classe de l'élément généré à celui d'origine pour laisser Hibernate le ramasser, soit l'identité, la séquence ou l'algorithme HILO pour créer des clés primaires en fonction des capacités de support de la base de données sous-jacente.
L'élément <propriété> est utilisé pour cartographier les propriétés d'une classe Java aux colonnes dans une table de base de données. L'attribut de nom d'un élément fait référence à la classe de l'attribut et l'attribut de colonne fait référence aux colonnes de la table de base de données. L'attribut de type enregistre le type de mappage Hibernate, qui sera converti de Java en type de données SQL.
L'élément <Set> est nouveau et a été introduit pour définir la relation entre le certificat et la classe des employés. Nous utilisons l'élément <Set> dans l'attribut Cascade pour dire Hibernate pour enregistrer l'objet de certificat et l'objet employé. L'attribut de nom est défini pour définir la variable dans la définition de la classe parent, dans notre cas, c'est un certificat. Pour chaque ensemble de variables, nous devons définir un ensemble distinct d'éléments dans le fichier de mappage.
L'élément <yey> est l'objet parent contenant une clé étrangère, c'est-à-dire la colonne de la table de certificat. Employé de table.
L'élément <o-à-plusieurs> indique qu'un objet employé implique de nombreux certificats et, par conséquent, l'objet de certificat doit être lié à l'employé parent. Vous pouvez utiliser n'importe quel et un à un à un>, <plusieurs à un> ou <plusieurs-à-à-mèler> selon les besoins.
Créer une classe d'application:
Enfin, nous créerons la méthode principale () de la classe d'application pour exécuter l'application. Nous utiliserons cette application pour enregistrer certains enregistrements des employés ainsi que les informations d'identification, puis nous demanderons des enregistrements sur l'opération CRUD.
import java.util. *; import org.hibernate.hibernateException; import org.hibernate.Session; import org.hibernate.transaction; import org.hibernate.essionfactory; import org.hibernate.cfg.configuration; classe publique managemployee {private static sessionfactory factory; public static void main (String [] args) {try {factory = new Configuration (). configure (). buildSessionFactory (); } catch (Throwable ex) {System.err.println ("Échec de la création de l'objet SessionFactory." + Ex); Jetez une nouvelle exceptionIninializizerError (ex); } ManageMloyee me = new ManageMloyee (); / * Avons un ensemble de certificats pour le premier employé * / hashset set1 = new HashSet (); set1.add (nouveau certificat ("MCA")); set1.add (nouveau certificat ("MBA")); set1.add (nouveau certificat ("MBA")); set1.add (nouveau certificat ("PMP")); / * Ajouter des enregistrements des employés dans la base de données * / Integer empid1 = me.addemployee ("manoj", "kumar", 4000, set1); / * Un autre ensemble de certificats pour le deuxième employé * / hashset set2 = new HashSet (); set2.add (nouveau certificat ("BCA")); set2.add (nouveau certificat ("ba")); / * Ajouter un autre enregistrement des employés dans la base de données * / Integer Empid2 = me.addemployee ("dilip", "kumar", 3000, set2); / * Énumérez tous les employés * / me.listEmployee (); / * Mettre à jour les dossiers salariaux de l'employé * / me.updateEmployee (EMPID1, 5000); / * Supprimer un employé de la base de données * / me.DeleteEmployee (EMPID2); / * Énumérez tous les employés * / me.listEmployee (); } / * Méthode pour ajouter un enregistrement des employés dans la base de données * / public Integer addEmployee (String fname, String lname, int salaire, set Cert) {session session = factory.opencession (); Transaction tx = null; EmployeeId entier = null; try {tx = session.begintransaction (); Employé employé Employé = nouvel employé (FNAME, LNAME, SALAIRE); Employee.SetCertificates (CERT); EmployeeId = (entier) Session.Save (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); } return EmployeeId; }! Transaction tx = null; try {tx = session.begintransaction (); Lister les employés = session.CreateeQuey ("From Employee"). List (); pour (iterator iterator1 = employés.iterator (); iterator1.hasnext ();) {employee employé = (employé) iterator1.next (); System.out.print ("prénom:" + employee.getFirstName ()); System.out.print ("nom de famille:" + employee.getLastName ()); System.out.println ("Salaire:" + employee.getsalary ()); Set Certificates = Employee.GetCertificates (); for (iterator iterator2 = certificate.Itorator (); iterator2.hasnext ();) {Certificate Certname = (Certificate) iterator2.Next (); System.out.println ("Certificat:" + certname.getName ()); }} tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }} / * Méthode pour mettre à jour le salaire pour un employé * / public void updateEmployee (entier EmployeeId, int salaire) {session session = factory.opencession (); Transaction tx = null; try {tx = session.begintransaction (); Employé employé employé = (employé) session.get (employee.class, employeeId); Employee.SetSalary (salaire); Session.Update (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }} / * Méthode pour supprimer un employé des dossiers * / public void DeleteEmployee (EmployeeId entier) {session session = factory.opencession (); Transaction tx = null; try {tx = session.begintransaction (); Employé employé employé = (employé) session.get (employee.class, employeeId); session.delete (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }}} Compiler et exécuter:
Voici les étapes pour compiler et exécuter l'application ci-dessus. Assurez-vous que Path et ClassPath sont définis de manière appropriée avant de compiler et d'exécuter.
Les résultats suivants seront obtenus à l'écran et les enregistrements seront créés dans les tables des employés et des certificats.
$ java managemployee
..... Divers messages de journal s'affichera ici ......... Prénom: Manoj Nom de famille: Kumar Salaire: 4000Certificate: Mbacertificate: PMPCertificate: McAfirst Nom
Si vous vérifiez l'employé et le formulaire de certificat, vous devez l'enregistrer:
MySQL> SELECT * à partir de l'employé;
+ ---------------------------- + ---------- + | ID | First_name | Last_name | Salaire | + ------------------------------------ + ------------ + ----------- + | 1 | Manoj | Kumar | 5000 | + -------------------------------- + --------- + 1 ligne en jeu (0,00 sec)
mysql> sélectionner * dans le certificat;
+ ---- + ------------------ + ------------- + | ID | Certificate_name | employee_id | + ---- + ------------------ + ------------- + | 1 | MBA | 1 || 2 | PMP | 1 || 3 | MCA | 1 | + ---- + ------------------ + ------------- + 3 rangées en jeu (0,00 sec)
mysql>
Triage
TRODSET est une collection Java qui ne contient aucun élément en double et éléments qui utilisent fournissent leur ordre naturel ou qui sont triés par un comparateur.
Une carte tridset, initialisée dans l'élément de la table de mappage <Set> et java.util.treeset. L'attribut de tri peut être défini sur un comparateur ou un ordre naturel. Si l'ordre naturel est utilisé, son itérateur traverse les éléments définis disposés dans l'ordre croissant.
Nous utilisons toujours le tableau RDBMS défini dans l'exemple ci-dessus, et il y aura une relation entre plusieurs objets d'employé et de certificat, et la classe POJO est également définie ci-dessus.
Implémentons l'employé de la classe POJO sera utilisé pour contenir une collection d'objets dans la table des employés et une variable de triage certifiée.
Définissons maintenant le certificat pour une autre classe POJO correspondant à la table de certificat, un tel objet de certificat peut stocker et récupérer le tableau de certificat. Cette classe doit également implémenter l'interface comparable et la méthode compareto sera utilisée pour définir Sort = "Natural" dans le cas des fichiers de mappage (voir les fichiers MAP ci-dessous), les éléments sont triés.
CLASSE PUBLIQUE CERTIFICATE IMPLOSIR UNE COMPARABLE <RIFERT> {private int id; nom de chaîne privé; Certificat public () {} Certificat public (nom de chaîne) {this.name = name; } public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int compareto (certificat that) {final int avant = -1; INT final après = 1; if (that == null) {return avant; } Comparable thisCertificate = this.getName (); Comparable thatCertificate = that.getName (); if (thisCertificate == null) {return after; } else if (thatCertificate == null) {return avant; } else {return thisCertificate.compareto (thatCertificate); }}} Définissez le fichier de mappage Hibernate:
Développer un fichier de mappage qui spécifie comment Hibernate définit un fichier de mappage qui mappe dans une table de base de données. L'élément <SET> sera utilisé pour définir les règles de la collection tridset utilisée.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Hibernate-Mapping Public "- // Hibernate / Hibernate Mapping Dtd // en" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> table = "Employee"> <meta attribut = "class-description"> Cette classe contient le détail des employés. </ meta> <id name = "id" type = "int" chronn = "id"> <générateur /> </ id> <set name = "certificats" cascade = "all" tri = "myclass"> <key column = "employee_id" /> <one-to-many /> </ set> <propriété name = "firstname" colonnes = "first_name" type = "string" /> <prewame name = "FirstName" colonnes = "first_name" Type = "String" / STRAT chronn = "last_name" type = "string" /> <propriété name = "salaire" chronn = "salaire" type = "int" /> </ class> <class name = "certificate" table = "certificate"> <meta attribute = "class-description"> Cette classe contient les enregistrements de certificat. </ meta> <id name = "id" type = "int" chronn = "id"> <générateur /> </ id> <propriété name = "name" colonnen = "certificate_name" type = "string" /> </ class> </ hibernate-mapping>
Le format <sclassname> .hbm.xml Dans le fichier de carte, enregistrez le fichier employee.hbm.xml dans le fichier de carte. Je connaissais déjà la plupart des détails de cartographie, mais voyons tous les éléments du fichier de mappage:
Un document mappé est un document XML avec <Hibernate-Mapping> en tant qu'élément racine correspondant à chaque classe contenant 2 <classe>.
L'élément <scons> est utilisé pour définir un mappage spécifique de la table de base de données à partir d'une classe Java. Le nom de la classe Java spécifie l'attribut de nom de l'élément de classe et la base de données d'attribut de table Nom de la table Spécifie.
L'élément <Meta> est un élément facultatif qui peut être utilisé pour créer une description de la classe.
L'élément <id> mappe l'attribut ID unique dans la classe à la clé principale de la table de base de données. L'attribut de nom de l'élément ID fait référence à la classe de l'attribut et l'attribut de colonne fait référence aux colonnes de la table de base de données. L'attribut de type enregistre le type de mappage Hibernate, qui sera converti de Java en type de données SQL.
L'élément <générateur> dans l'élément ID est utilisé pour générer automatiquement la valeur de clé primaire. Définissez l'attribut de classe de l'élément généré pour nativement, laissez Hibernate ramasser l'algorithme dans l'identité, la séquence ou Hilo pour créer des clés primaires en fonction des capacités de support de la base de données sous-jacente.
L'élément <propriété> est utilisé pour cartographier les propriétés d'une classe Java aux colonnes dans une table de base de données. L'attribut de nom d'un élément fait référence à la classe de l'attribut et l'attribut de colonne fait référence aux colonnes de la table de base de données. L'attribut de type enregistre le type de mappage Hibernate, qui sera converti de Java en type de données SQL.
L'élément <Set> est utilisé pour définir la relation entre le certificat et la classe des employés. Nous utilisons l'élément <Set> dans l'attribut Cascade pour dire Hibernate pour enregistrer l'objet de certificat, ainsi que dans l'objet employé. L'attribut de nom est défini sur la variable du SortEdSet défini dans la classe parent, dans notre cas, il s'agit d'un certificat. La propriété de tri peut être définie sur le tri naturel, ou il peut être défini sur l'implémentation de classe personnalisée sous le nom de java.util. Nous avons utilisé une classe MyClass qui l'implémente sous le nom de java.util.comparator pour inverser l'ordre de tri de l'implémentation de classe de certificat.
L'élément <yey> est l'objet parent contenant une clé étrangère, c'est-à-dire la colonne de la table de certificat. Employé de table.
L'élément <o-à-many> indique qu'un objet employé implique de nombreux objets de certificat et, par conséquent, l'objet de certificat doit être lié à l'employé parent. Vous pouvez utiliser n'importe quel et un à un à un>, <plusieurs à un> ou <plusieurs-à-à-mèler> selon les besoins.
Si vous utilisez le paramètre Sort = "Natural", vous n'avez pas besoin de créer une classe distincte, car la classe de certificat a implémenté l'interface comparable et Hibernate utilisera le compareto (défini comme le nom de certificat de comparaison dans la classe de certificat). Cependant, nous utilisons une classe de comparaison personnalisée MyClass dans notre fichier de mappage, nous devons donc créer cette classe en fonction de l'algorithme de tri. Utilisez cette classe pour trier dans l'ordre descendant.
Importer java.util ..Parator; public class MyClass implémente le comparateur <Retificate> {public int compare (certificat o1, certificat o2) {final int avant = -1; INT final après = 1; / * Pour inverser l'ordre de tri, plusieurs par -1 * / if (o2 == null) {return avant * -1; } Comparable thisCertificate = o1.getName (); Comparable thatCertificate = o2.getName (); if (thisCertificate == null) {return after * 1; } else if (thatCertificate == null) {return avant * -1; } else {return thisCertificate.compareto (thatCertificate) * -1; }}} Créer une classe d'application:
Enfin, nous créerons la méthode principale () de la classe d'application pour exécuter l'application. Nous utiliserons cette application pour enregistrer certains enregistrements des employés ainsi que le certificat, puis nous demanderons des enregistrements sur l'opération CRUD.
import java.util. *; import org.hibernate.hibernateException; import org.hibernate.Session; import org.hibernate.transaction; import org.hibernate.essionfactory; import org.hibernate.cfg.configuration; classe publique managemployee {private static sessionfactory factory; public static void main (String [] args) {try {factory = new Configuration (). configure (). buildSessionFactory (); } catch (Throwable ex) {System.err.println ("Échec de la création de l'objet SessionFactory." + Ex); Jetez une nouvelle exceptionIninializizerError (ex); } ManageMloyee me = new ManageMloyee (); / * Ayons un ensemble de certificats pour le premier employé * / arreset set1 = new TreeSet (); set1.add (nouveau certificat ("MCA")); set1.add (nouveau certificat ("MBA")); set1.add (nouveau certificat ("MBA")); set1.add (nouveau certificat ("PMP")); / * Ajouter des enregistrements des employés dans la base de données * / Integer empid1 = me.addemployee ("manoj", "kumar", 4000, set1); / * Un autre ensemble de certificats pour le deuxième employé * / arreset set2 = new TreeSet (); set2.add (nouveau certificat ("BCA")); set2.add (nouveau certificat ("ba")); / * Ajouter un autre enregistrement des employés dans la base de données * / Integer Empid2 = me.addemployee ("dilip", "kumar", 3000, set2); / * Énumérez tous les employés * / me.listEmployee (); / * Mettre à jour les dossiers salariaux de l'employé * / me.updateEmployee (EMPID1, 5000); / * Supprimer un employé de la base de données * / me.DeleteEmployee (EMPID2); / * Énumérez tous les employés * / me.listEmployee (); } / * Méthode pour ajouter un enregistrement des employés dans la base de données * / public Integer addEmployee (String fname, String lname, int salaire, trisedset Cert) {session session = factory.openssesse (); Transaction tx = null; EmployeeId entier = null; try {tx = session.begintransaction (); Employé employé Employé = nouvel employé (FNAME, LNAME, SALAIRE); Employee.SetCertificates (CERT); EmployeeId = (entier) Session.Save (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); } return EmployeeId; }! Transaction tx = null; try {tx = session.begintransaction (); Lister les employés = session.CreateeQuey ("From Employee"). List (); pour (iterator iterator1 = employés.iterator (); iterator1.hasnext ();) {employee employé = (employé) iterator1.next (); System.out.print ("prénom:" + employee.getFirstName ()); System.out.print ("nom de famille:" + employee.getLastName ()); System.out.println ("Salaire:" + employee.getsalary ()); TRADSET CERTIFICATES = Employee.GetCertificates (); for (iterator iterator2 = certificate.Itorator (); iterator2.hasnext ();) {Certificate Certname = (Certificate) iterator2.Next (); System.out.println ("Certificat:" + certname.getName ()); }} tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }} / * Méthode pour mettre à jour le salaire pour un employé * / public void updateEmployee (entier EmployeeId, int salaire) {session session = factory.opencession (); Transaction tx = null; try {tx = session.begintransaction (); Employé employé employé = (employé) session.get (employee.class, employeeId); Employee.SetSalary (salaire); Session.Update (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }} / * Méthode pour supprimer un employé des dossiers * / public void DeleteEmployee (EmployeeId entier) {session session = factory.opencession (); Transaction tx = null; try {tx = session.begintransaction (); Employé employé employé = (employé) session.get (employee.class, employeeId); session.delete (employé); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); e.printStackTrace (); } enfin {session.close (); }}}Après avoir compilé et exécuté, les résultats suivants sont obtenus à l'écran et les enregistrements sont créés à la fois dans les tables de l'employé et de certificat. Vous pouvez voir que les certificats ont été triés dans l'ordre opposé. Vous pouvez l'essayer en modifiant le fichier de mappage, il suffit de définir tri = "naturel" et d'exécuter le programme et de comparer les résultats.
$ java managemployee
..... Divers messages de journal s'affichera ici ......... Prénom: Manoj Nom de famille: Kumar Salaire: 4000Certificate: PMPCertificate: McACertificate: Mbafirst Nom: Dilip Nom de famille: Kumar Salaire: 3000Certificat: Bcacertificat: Bafirst Name: Manoj Nom: McAar: 5000.
Si vous vérifiez l'employé et le formulaire de certificat, vous devez l'enregistrer:
MySQL> SELECT * à partir de l'employé;
+ ---------------------------- + ---------- + | ID | First_name | Last_name | Salaire | + ------------------------------------ + ------------ + ----------- + | 1 | Manoj | Kumar | 5000 | + -------------------------------- + --------- + 1 ligne en jeu (0,00 sec)
mysql> sélectionner * dans le certificat;
+ ---- + ------------------ + ------------- + | ID | Certificate_name | employee_id | + ---- + ------------------ + ------------- + | 1 | MBA | 1 || 2 | PMP | 1 || 3 | MCA | 1 | + ---- + ------------------ + ------------- + 3 rangées en jeu (0,00 sec)