Section 1 : Mappage des Types de Base
Produit.java:
package com.cy.model;
import java.sql.Blob;
import java.util.Date;
public class Produit {
private int identifiant;
private String nomProduit; // Nom du produit
private double prix; // Prix du produit
private boolean promotion; // En promotion
private Date datePublication; // Date de publication
private String createur; // Créateur
private String description; // Description
private Blob imageProduit; // Image du produit
public int getIdentifiant() {
return identifiant;
}
public void setIdentifiant(int identifiant) {
this.identifiant = identifiant;
}
public String getNomProduit() {
return nomProduit;
}
public void setNomProduit(String nomProduit) {
this.nomProduit = nomProduit;
}
public double getPrix() {
return prix;
}
public void setPrix(double prix) {
this.prix = prix;
}
public boolean isPromotion() {
return promotion;
}
public void setPromotion(boolean promotion) {
this.promotion = promotion;
}
public Date getDatePublication() {
return datePublication;
}
public void setDatePublication(Date datePublication) {
this.datePublication = datePublication;
}
public String getCreateur() {
return createur;
}
public void setCreateur(String createur) {
this.createur = createur;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Blob getImageProduit() {
return imageProduit;
}
public void setImageProduit(Blob imageProduit) {
this.imageProduit = imageProduit;
}
}
Voir le codeProduit.hbm.xml:
<?xml version="1.0"?>
<hibernate-mapping package="com.cy.model">
<class name="Produit" table="t_produit">
<id name="identifiant" column="produitId">
<generator class="native"></generator>
</id>
<!--
type correspond au type de mappage hibernate
length="40" indique une longueur de chaîne de 40 caractères
-->
<property name="nomProduit" column="nomProduit" length="40"></property>
<property name="prix" column="prix" type="double"></property>
<property name="promotion" column="promotion" type="boolean"></property>
<property name="datePublication" column="datePublication" type="date"></property>
<property name="createur" column="createur" length="20"></property>
<property name="description" column="description" type="text"></property>
<property name="imageProduit" column="imageProduit" type="blob"></property>
</class>
</hibernate-mapping>
TestProduit.java:
public class TestProduit {
public static void main(String[] args) throws ParseException, IOException {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Produit produit = new Produit();
produit.setNomProduit("Programmation Java avancée");
produit.setPrix(89.99);
produit.setPromotion(true);
produit.setCreateur("Martin");
produit.setDatePublication(new SimpleDateFormat("yyyy-MM-dd").parse("2023-3-15"));
produit.setDescription("Ouvrage complet sur Java...");
LobHelper lobHelper = session.getLobHelper();
InputStream in = new FileInputStream("c://java_avance.jpg");
Blob imageProduit = lobHelper.createBlob(in, in.available());
produit.setImageProduit(imageProduit);
session.save(produit);
session.getTransaction().commit();
session.close();
}
}
Résultat:
t_produit:
Après l'enregistrement des données:
Section 2 : Mappage des Types de Collcetion
Ces collections diffèrent des associations un-à-plusieurs ou plus-à-un abordées précédemment ;Il s'agit ici de compositions simples de mappage de données, sans session cache ni OID1. Mappage de l'ensemble Set:
Apprenant.java:
package com.cy.model;
import java.util.Set;
public class Apprenant {
private long id;
private String nom;
private Set<String> documents;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public Set<String> getDocuments() {
return documents;
}
public void setDocuments(Set<String> documents) {
this.documents = documents;
}
}
Voir le codeApprenant.hbm.xml:
<hibernate-mapping package="com.cy.model">
<class name="Apprenant" table="t_apprenant">
<id name="id" column="apprenantId">
<generator class="native"></generator>
</id>
<property name="nom" column="nomApprenant"></property>
<!-- La clé étrangère apprenantId dans la table t_document référence la clé primaire de la table t_apprenant
L'élément element représente l'élément de l'ensemble
-->
<set name="documents" table="t_document">
<key column="apprenantId"></key>
<element column="nomDocument" type="string"></element>
</set>
</class>
</hibernate-mapping>
Test:
@Test
public void testEnregistrementSet(){
Set<String> ensembleDocuments = new HashSet<String>();
ensembleDocuments.add("doc1.pdf");
ensembleDocuments.add("doc2.pdf");
ensembleDocuments.add("doc3.pdf");
ensembleDocuments.add("doc3.pdf");
Apprenant a1 = new Apprenant();
a1.setDocuments(ensembleDocuments);
session.save(a1);
}
@Test
public void testRecuperationSet(){
Apprenant apprenant = (Apprenant)session.get(Apprenant.class, Long.valueOf(1));
Iterator it = apprenant.getDocuments().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
Voir le codeAprès l'exécution de testEnregistrementSet:
t_apprenant
t_document: la clé étrangère apprenantId référence la colonne de clé primaire de t_apprenant
- Mappage de l'ensemble List:
List: C'est grâce à la colonne d'index docIndex qu'il est ordonné ;Apprenant2.java:
package com.cy.model;
import java.util.List;
public class Apprenant2 {
private long id;
private String nom;
private List<String> documents;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public List<String> getDocuments() {
return documents;
}
public void setDocuments(List<String> documents) {
this.documents = documents;
}
}
Voir le codeApprenant2.hbm.xml:
<hibernate-mapping package="com.cy.model">
<class name="Apprenant2" table="t_apprenant">
<id name="id" column="apprenantId">
<generator class="native"></generator>
</id>
<property name="nom" column="nomApprenant"></property>
<list name="documents" table="t_document2">
<key column="apprenantId"></key>
<list-index column="docIndex"></list-index>
<element column="nomDocument" type="string"></element>
</list>
</class>
</hibernate-mapping>
Code de test:
@Test
public void testEnregistrementListe(){
List<String> listeDocuments = new ArrayList<String>();
listeDocuments.add("doc1.pdf");
listeDocuments.add("doc2.pdf");
listeDocuments.add("doc3.pdf");
listeDocuments.add("doc3.pdf");
Apprenant2 a2 = new Apprenant2();
a2.setDocuments(listeDocuments);
session.save(a2);
}
@Test
public void testRecuperationListe(){
Apprenant2 apprenant2 = (Apprenant2)session.get(Apprenant2.class, Long.valueOf(2));
Iterator it = apprenant2.getDocuments().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
Voir le codet_apprenant:
t_document2:
- Mappage de l'ensemble Bag:
Similaire à List mais généralement non ordonné avec de grands volumes de données ;Apprenant3.java:``` package com.cy.model;
import java.util.List;
public class Apprenant3 { private long id; private String nom; private List<String> documents;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public List<String> getDocuments() {
return documents;
}
public void setDocuments(List<String> documents) {
this.documents = documents;
}
}
Voir le codeApprenant3.hbm.xml:
<class name="Apprenant3" table="t_apprenant">
<id name="id" column="apprenantId">
<generator class="native"></generator>
</id>
<property name="nom" column="nomApprenant"></property>
<idbag name="documents" table="t_document3">
<collection-id type="long" column="documentId">
<generator class="increment"></generator>
</collection-id>
<key column="apprenantId"></key>
<element column="nomDocument" type="string"></element>
</idbag>
</class>
Code de test:
@Test
public void testEnregistrementSac(){
List<String> listeDocuments = new ArrayList<String>();
listeDocuments.add("doc1.pdf");
listeDocuments.add("doc2.pdf");
listeDocuments.add("doc3.pdf");
listeDocuments.add("doc3.pdf");
Apprenant3 a3 = new Apprenant3();
a3.setDocuments(listeDocuments);
session.save(a3);
}
@Test
public void testRecuperationSac(){
Apprenant3 apprenant3 = (Apprenant3)session.get(Apprenant3.class, Long.valueOf(3));
Iterator it = apprenant3.getDocuments().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
Voir le code4. Mappage de l'ensemble Map
Apprenant4.java:
package com.cy.model;
import java.util.Map;
public class Apprenant4 {
private long id;
private String nom;
private Map<String, String> documents;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public Map<String, String> getDocuments() {
return documents;
}
public void setDocuments(Map<String, String> documents) {
this.documents = documents;
}
}
Voir le codeApprenant4.hbm.xml:
<hibernate-mapping package="com.cy.model">
<class name="Apprenant4" table="t_apprenant">
<id name="id" column="apprenantId">
<generator class="native"></generator>
</id>
<property name="nom" column="nomApprenant"></property>
<map name="documents" table="t_document4">
<key column="apprenantId"></key>
<map-key column="cleDoc" type="string"></map-key>
<element column="nomDocument" type="string"></element>
</map>
</class>
</hibernate-mapping>
Code de test:
@Test
public void testEnregistrementMap(){
Map<String, String> mapDocuments = new HashMap<String, String>();
mapDocuments.put("d1", "doc1.pdf");
mapDocuments.put("d2", "doc2.pdf");
mapDocuments.put("d3", "doc3.pdf");
mapDocuments.put("d4", "doc4.pdf");
Apprenant4 a4 = new Apprenant4();
a4.setDocuments(mapDocuments);
session.save(a4);
}
@Test
public void testRecuperationMap(){
Apprenant4 apprenant4 = (Apprenant4)session.get(Apprenant4.class, Long.valueOf(4));
/**
* Parcours du map, méthode 1
*/
Iterator<Entry<String, String>> it = apprenant4.getDocuments().entrySet().iterator();
while(it.hasNext()){
Entry<String, String> entry = it.next();
System.out.println(entry.getKey() + "----" + entry.getValue());
}
System.out.println("------------------------------------------------");
/**
* Méthode 2
*/
Map<String, String> mapDocuments = apprenant4.getDocuments();
Set<String> clesDoc = mapDocuments.keySet();
Iterator<String> its = clesDoc.iterator();
while(its.hasNext()){
String cle = its.next();
System.out.println(cle + ":" + mapDocuments.get(cle));
}
}
Voir le codeAprès l'exécution de testEnregistrementMap:
Structure de la table t_document4:
Après l'exécution de testRecuperationMap: