Exemple02_Persistance1RetourTélécharger Exemple de persistance des instances d'une classe (Personne) dans une base de donnes MySQL. Cet exemple n'utilise pas les notations mais un fichier de configuration : Personne.hbm.xml README.txt Il faut installer 3 lments : - EasyPHP pour pouvoir crer une base de donnes MySQL - le connecteur java jdbc : http://dev.mysql.com/downloads/connector/j tlcharger le driver Connector/J 8.1.0 : platform independaent : au format zip copier mysql-connector-j-8.1.0.jar la racine - hibernate : http://hibernate.org/orm/ tlcharger hibernate-release-4.3.6.Final.zip Afin que l'exemple soit autonome, on copie dans le rpertoire de l'exemple : les .jar de hibernate-release-4.3.6.Final/lib/required suivants : dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.6.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-transaction-api_1.2_spec-1.0.0.Final.jar Exemple02.java // Exemple de persistance des instances d'une classe (Personne) dans une base de donnes MySQL. // Cet exemple n'utilise pas les notations mais un fichier de configuration : // Personne.hbm.xml // import org.hibernate.*; import org.hibernate.cfg.*; import java.sql.*; import java.util.*; import fr.cnam.test.*; import fr.cnam.ihm.*; import fr.cnam.tore.*; public class Exemple02 implements FormulaireInt { Configuration config ; SessionFactory sessionFactory; ArrayList<Personne> liste; Formulaire form; Session sessionPersist; // Ce programe // permet de verifier l'utilisation en sauvegarde/chagerment // et en mode persistance // public static void main(String[] args) throws Exception { // Creation de l'exemple new Exemple02(); } public Exemple02() { // ------------ Configuration de la persistance // config = new Configuration(); // Configuration du mapping de la classe Personne config.addClass(fr.cnam.test.Personne.class); // Va chercher le fichier Personne.hbm.xml // Configuration de la session avec la base de donnes : // voir le contenu du fichier hibernate.cfg.xml sessionFactory = config.configure("hibernate.cfg.xml").buildSessionFactory(); // pour tester la persistance // ----------- Initialisation du metier liste=new ArrayList<Personne>(); liste.add(new Personne("LAFONT","Pierre",32)); liste.add(new Personne("DUPONT","Paul",46)); liste.add(new Personne("ROCKY","Balboa",75)); // ----------- Initialisation de l'IHM form = new Formulaire("PERSITANCE 1",this,700,600,true); form.addText("NOM","Nom",true,""); form.addText("PRENOM","Prenom",true,""); form.addText("AGE","Age",true,""); form.addButton("AJOUTER","Ajouter"); form.addText("ID","Id",true,""); form.addButton("MODIFIER","Modifier"); form.addButton("LISTER","Lister"); form.addLabel(""); form.addButton("SAUVER","Sauver"); form.addButton("CHARGER","Charger"); form.addLabel(""); form.addButton("LECTURE_BASE","Lecture base"); form.addLabel(""); form.addButton("PERSIST","Persist"); form.addButton("FLUSH","Flush"); form.setPosition(250,0); form.addZoneText("RESULTAT", "Resultat", false, "", 400, 600); form.afficher(); } public void submit(Formulaire form,String nomSubmit) { if (nomSubmit.equals("AJOUTER")) { String nom = form.getValeurChamp("NOM"); String prenom = form.getValeurChamp("PRENOM"); int age = Integer.parseInt(form.getValeurChamp("AGE")); liste.add(new Personne(nom,prenom,age)); lister(); } if (nomSubmit.equals("MODIFIER")) { String nom = form.getValeurChamp("NOM"); String prenom = form.getValeurChamp("PRENOM"); int age = Integer.parseInt(form.getValeurChamp("AGE")); int id = Integer.parseInt(form.getValeurChamp("ID")); for(Personne p:liste) if(p.getId()==id){ p.setNom(nom); p.setPrenom(prenom); p.setAge(age); break; } lister(); } if (nomSubmit.equals("LISTER")) { lister(); } if (nomSubmit.equals("SAUVER")) { // Ouverture de la session Session session = sessionFactory.openSession(); // Transaction tx = null; try { tx = session.beginTransaction(); for(Personne p:liste) session.saveOrUpdate(p); session.flush(); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } if (nomSubmit.equals("PERSIST")) { // Ouverture de la session de persistance (a faire qu'1 fois) sessionPersist = sessionFactory.openSession(); try { for(Personne p:liste) try{sessionPersist.persist(p);}catch(Exception ex){} sessionPersist.flush(); } catch (Exception e) { throw e; } finally { } } if (nomSubmit.equals("FLUSH")) { sessionPersist.flush(); } if (nomSubmit.equals("CHARGER")) { Session session = sessionFactory.openSession(); // liste.clear(); int id=1; while(true) { Personne p = (Personne)session.get(Personne.class,id); if(p==null) break; liste.add(p); id=id+1; } session.close(); lister(); } if (nomSubmit.equals("LECTURE_BASE")) { Session session = sessionFactory.openSession(); String res=""; int id=1; while(true) { Personne p = (Personne)session.get(Personne.class,id); if(p==null) break; res = res+p.toString()+"\n"; id=id+1; } form.setValeurChamp("RESULTAT",res); session.close(); } } public String lister() { String res=""; for(Personne p:liste)res=res+p.toString()+"\n"; form.setValeurChamp("RESULTAT",res); return res; } public void exit() { sessionFactory.close(); } } Terminal.java import java.io.*; import java.util.*; /** La classe Terminal permet de raliser ses premiers programmes Java en permettant d'afficher dans la console d'excution des donnes de type diffrents, et en permettant de saisir au clavier des donnes de type diffrents.<BR> Elle permet aussi de lire et crire un fichier texte Cette classe contient que des mthodes statiques. */ public class Terminal{ // Le buffer standard de lecture = le clavier private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); /** Cette mthode lit un fichier texte et retourne le contenu du fichier sous la forme d'un tableau de String dont chaque element est une ligne du fichier. @param nomFichier le nom du fichier qui doit tre dans le rpertoire courant. @return String[] le contenu du fichier ou null si erreur de lecture */ public static String[] lireFichierTexte(String nomFichier) { try{ File fichier = new File(nomFichier); if (! fichier.exists()) { System.out.println("Le fichier "+nomFichier+" n'existe pas ou n'est pas accessible"); return null; } FileInputStream fis = new FileInputStream(new File(nomFichier)); byte[] buffer = new byte[(int)fichier.length()]; fis.read(buffer); fis.close(); String str = new String(buffer); // On enleve le caractre '\r' code 13 qui est ajout en Windows // Les fins de ligne dans un fichier texte cr sous Windows // se termine par \r\n. // Il faut enlever le \r car il a des effets perturbant sur // la mthode System.out.print et est pris comme un caractre de plus // qu'il faut liminer // String texte = str.replaceAll(""+(char)(13),""); // Les lignes du fichier sont mises dans un tableau // String[] mots = texte.split("\n"); return(mots); } catch(Exception ex) { return null; } } /** Cette mthode permet de crer un fichier texte partir du contenu d'un StringBuffer. @param nomFichier Le nom du fichier qui est cr dans le rpertoire courant @param strbuf Le StringBuffer contenant le texte crire. @exception TerminalException (de type RuntimeException) si erreur d'criture */ public static void ecrireFichier(String nomFichier, StringBuffer strbuf) { try{ File fichier = new File(nomFichier); FileOutputStream fos = new FileOutputStream(new File(nomFichier)); byte[] buffer = strbuf.toString().getBytes(); fos.write(buffer); fos.close(); } catch(Exception ex) { exceptionHandler(ex); } } /** Cette mthode lit une chane de caractre @return String la chane saisie dans la console d'excution @exception TerminalException (de type RuntimeException) si erreur de lecture */ public static String lireString() // Lire un String { String tmp=""; char C='\0'; try { tmp = in.readLine(); } catch (IOException e) { exceptionHandler(e); } return tmp; } public static String lireString(String str) // Lire un String { System.out.print(str); String tmp=""; char C='\0'; try { tmp = in.readLine(); } catch (IOException e) { exceptionHandler(e); } return tmp; } /** Cette mthode lit un entier @return int L'entier saisi dans la console d'excution @exception TerminalException (de type RuntimeException) si la saisie n'est pas un entier ou erreur de lecture */ public static int lireInt() // Lire un entier { int x=0; try { x=Integer.parseInt(lireString()); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette mthode lit un boolean (false ou true) @return boolean Le boolean saisi dans la console d'excution @exception TerminalException (de type RuntimeException) si erreur de lecture. <BR> Tout autre valeur que TRUE, FALSE, true ou false, retourne la valeur false */ public static boolean lireBoolean() // Lire un entier { boolean b = true; try { b = Boolean.valueOf(lireString()).booleanValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return b; } /** Cette mthode lit un double @return double Le double saisi dans la console d'excution @exception TerminalException (de type RuntimeException) si la valeur saisie n'est pas un double ou ereur de lecture. */ public static double lireDouble() // Lire un double { double x=0.0; try { x=Double.valueOf(lireString()).doubleValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette mthode lit un caractre. @exception TerminalException (de type RuntimeException) si erreur de lecture.<BR> Si on saisit plus d'1 caractre alors le caractre retourn est le premier. */ public static char lireChar() // Lire un caractere { String tmp=lireString(); if (tmp.length()==0) return '\n'; else { return tmp.charAt(0); } } /** Cette mthode crit une chaine et ne revient pas la ligne. @param s la chaine à écrire */ public static void ecrireString(String s){ // Afficher un String System.out.print(s); } /** Cette mthode crit une chaine et revient la ligne. @param s la chaine à écrire */ public static void ecrireStringln(String s) // Afficher un String { ecrireString(s); sautDeLigne(); } /** Cette mthode crit un entier et ne revient pas la ligne. @param i l'entier crire */ public static void ecrireInt(int i) // Afficher un entier { ecrireString(""+i); } /** Cette mthode crit un entier et revient la ligne. @param i l'entier crire */ public static void ecrireIntln(int i) // Afficher un entier { ecrireString(""+i); sautDeLigne(); } /** Cette mthode crit un boolan et ne revient pas la ligne. @param b le boolen crire */ public static void ecrireBoolean(boolean b){ ecrireString(""+b); } /** Cette mthode crit un boolan et revient la line. @param b le boolen crire */ public static void ecrireBooleanln(boolean b){ ecrireString(""+b); sautDeLigne(); } /** Cette mthode crit un double et ne revient pas la ligne. @param d le double crire */ public static void ecrireDouble(double d) // Afficher un double { ecrireString(""+d); } /** Cette mthode crit un double et revient la ligne. @param d le double crire */ public static void ecrireDoubleln(double d) // Afficher un double { ecrireDouble(d); sautDeLigne(); } /** Cette mthode crit un caractre et ne revient pas la ligne. @param c le caractre crire */ public static void ecrireChar(char c) // Afficher un caractere { ecrireString(""+c); } /** Cette mthode crit un caractre et revient la ligne. @param c le caractre crire */ public static void ecrireCharln(char c) // Afficher un caractere { ecrireChar(c); sautDeLigne(); } /** Cette mthode revient la ligne. */ public static void sautDeLigne(){ try{ System.out.println(); }catch(Exception ex){ exceptionHandler(ex); } } /** Cette mthode retourne l'exception TerminalException */ protected static void exceptionHandler(Exception ex){ TerminalException err = new TerminalException(ex); throw err; } /** Cette mthode crit une exception avec la pile dans la console @param ex l'exception crire */ public static void ecrireException(Throwable ex){ ecrireString(ex.toString()); ex.printStackTrace(System.out); } } /** Classe de dfinition de l'exception TerminalException qui peut tre retourne dans l'usage des mthodes de la classe Terminal. */ class TerminalException extends RuntimeException{ Exception ex; TerminalException(Exception e){ ex = e; } } compil.bat mkdir bin del /f /s /q bin\*.class del /f /s /q bin\*.xml javac -d bin -classpath ".;hibernate-core-4.3.6.Final.jar;hibernate-jpa-2.1-api-1.0.0.Final.jar" Exemple02.java fr/cnam/test/MySQL5MyISAMDialect.java copy fr\cnam\test\Personne.hbm.xml bin\fr\cnam\test copy hibernate.cfg.xml bin pause fr cnam ihm test MySQL5MyISAMDialect.java package fr.cnam.test; /* Pour des raisons de compatibilit avec la version du serveur SQL de EasyPHP, il faut surcharger la syntaxe du type de dialecte. Il faut configurer hibernate.cfg.xml avec cette classe. */ import org.hibernate.dialect.MySQLMyISAMDialect; public class MySQL5MyISAMDialect extends MySQLMyISAMDialect { public String getTableTypeString() { return "ENGINE=MyISAM"; } } Personne.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="fr.cnam.test.Personne" table="personnes"> <id name="id" type="int" column="id"> <generator class="native"/> </id> <property name="nom" type="string" not-null="true" /> <property name="prenom" type="string" not-null="true" /> <property name="age" type="int"> </property> </class> </hibernate-mapping> Personne.java package fr.cnam.test; import javax.persistence.*; public class Personne { private Integer id; private String nom; private String prenom; private Integer age; public Personne() { id=0; nom=""; prenom=""; age=0; } public Personne(String nom,String prenom,Integer age) { this.nom=nom; this.prenom=prenom; this.age=age; } public String toString() { return String.format("%2d %15s %15s %2d",id,nom,prenom,age); } public Integer getId(){return id;} public String getNom(){return nom;} public String getPrenom(){return prenom;} public Integer getAge(){return age;} public void setId(Integer id){this.id=id;} public void setNom(String nom){this.nom=nom;} public void setPrenom(String prenom){this.prenom=prenom;} public void setAge(Integer age){this.age=age;} } tore hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/labo</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="connection.useSSL">false</property> <property name="connection.serverTimezone">UTC</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">2</property> <!-- SQL dialect --> <!-- <property name="dialect">org.hibernate.dialect.MySQLISAMDialect</property> --> <property name="dialect">fr.cnam.test.MySQL5MyISAMDialect</property> <!-- <property name="dialect">>fr.cnam.test.MySQL5Dialect</property> --> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration> mysql-connector-j-8.1.0.zip PK @aV mysql-connector-j-8.1.0/PK @aV mysql-connector-j-8.1.0/src/PK @aV " mysql-connector-j-8.1.0/src/build/PK @aV ' mysql-connector-j-8.1.0/src/build/java/PK @aV 5 mysql-connector-j-8.1.0/src/build/java/documentation/PK @aV 7 mysql-connector-j-8.1.0/src/build/java/instrumentation/PK @aV ' mysql-connector-j-8.1.0/src/build/misc/PK @aV 1 mysql-connector-j-8.1.0/src/build/misc/debian.in/PK @aV 8 mysql-connector-j-8.1.0/src/build/misc/debian.in/source/PK @aV ! mysql-connector-j-8.1.0/src/demo/PK @aV &