[Java] La piste intéressante du système JPA.

maxresdefault.jpg

Introduction


Après avoir lu un livre (Eyrolles – Spring par la Pratique.pdf) parlant du  framework Spring MVC, et avoir beaucoup de mal à comprendre les concepts si nombreux,

j’ai découvert le livre suivant Antonio Goncalves- Java EE 5, qui parle du système JPA apparu en 2007.

Ce système semble vraiment très intéressant, en effet, JPA crée les tables SQL du programme automatiquement, et réalise automatiquement le mapping objet-relationnel.

 

Description


Dans mes exercices, je suis souvent en train de faire du mapping objet relationnel, par exemple ici, dans « Trouve ton Film ».

En l’occurence, Le langage PHP requête la base SQL, puis crée le mapping objet relationnel à l’aide de la fonction jsonEncode() qui renvoie l’objet à AngularJs;

Sans parler que dès que j’ai besoin de faire du Crud, il n’existe pas à ma connaissance de système de Scaffolding angularJs-Php. Par contre il en existe des PHP-Mysql tout court.

Le système JAVA – JPA est donc une super idée, dans le sens qu’il automatise tout ce système de mapping objet relationnel. Par contre on ne travaille plus au format JSON.

Je suis très loin d’avoir mis en place pareil système avec mon Eclipse, mais sur le papier c’est assez séduisant. Apparemment, il faut bien maitriser les JSP, les Servlets et les Beans pour le mettre en place, mais la fonctionnalité est relativement bien décrite.

 

Le problème


Les concepts Java sont souvent attrayants sur le papier et bien structurés, mais j’ai souvent un mal de chien à les appliquer dans mes exercices, et à faire tourner Eclipse sans péter les plombs, je ne sais pas pourquoi. Il faut quand même essayer d’en faire tous les jours si possible. Je n’ai aucun petit exo sympa tournant sous Java et Sql actuellement.

Je me demande si je ne devrais pas tout simplement utiliser Notepad++ pour utiliser Java.

 

Comment faire :


Il faudrait réaliser un exercice tout en Français utilisant JPA, réduit à sa plus simple expression, le problème étant qu’il implique des technologies comme le serveur Glassfish qui rentre en collision avec mon autre matériel.

Il faudrait se cantonner à faire du simple CRUD avec ce JPA, (qui permet également de créer des jointures !)

C’est quand même super de se dire qu’en tapant le programme JAVA, les tables SQL vont se créer et se gérer toutes seules !

Les liens sur Internet :


  • http://www.jmdoudoux.fr/java/dej/chap-jpa.htm
  • https://openclassrooms.com/courses/creez-votre-application-web-avec-java-ee/la-persistance-des-donnees-avec-jpa
  • http://jean-luc.massat.perso.luminy.univ-amu.fr/ens/jee/tp-JPA1.html

 

Publicités

Généralités Java

Introduction


Voici quelques premiers codes Java de base avec AWT … A exécuter dans Eclipse.

Je fais aussi des JSP Servlets.

Sommaire :


Code 1 : Demander 1 valeur numérique à un utilisateur en mode texte et donner une réponse conditionnelle.
Code 2 : Créer une fenêtre avec le gestionnaire AWT
Code 3 : Créer une fenêtre avec le gestionnaire AWT et avec un bouton permettant de la fermer.
Code 4 : Exécuter une boucle tant qu’une condition est vraie .
Code 5 : Faire de la programmation objet en ligne de commande .
Code 6 : Dessiner un cercle dégradé:
Code 7 : Créer une fenêtre avec AWT avec des menus .
Code 8 : Afficher un message d’erreur.
Code 9 : Afficher une fenêtre permettant de choisir une option.

Premiers codes, en vrac :


Code 1 : Demander 1 valeur numérique à un utilisateur en mode texte et donner une réponse conditionnelle.


import java.io.*;
import java.util.*;

public class recupereValeurConditionnelle {

	public static void main(String[] args) throws IOException,NumberFormatException{
		int entier_A;
		String recup_saisie;
		BufferedReader saisie = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Saisissez un nombre entier, svp");

		recup_saisie = saisie.readLine();
		entier_A = Integer.parseInt(recup_saisie);

		if (entier_A>5){
			System.out.println("La valeur saisie vaut >5");
		}

		else{
			System.out.println("La valeur saisie vaut <5");
		}

	}

}

Code 2 : Créer une fenêtre avec le gestionnaire AWT


import java.awt.*;

class creerFenetre {
	public static void main(String[] args) {
		Frame fenetre;
		fenetre = new Frame("Hello, java ?") ;
		fenetre.setSize(500,200);
		fenetre.setVisible(true);
		Label Text = new Label("Code Java",Label.CENTER);
		fenetre.add(Text);
	}
}

Code 3 : Créer une fenêtre avec le gestionnaire AWT et avec un bouton permettant de la fermer.

import java.awt.*;
import java.awt.event.*;

class creerFenetre2 extends Frame{

	public creerFenetre2(){
		setTitle("bonjour java");

		Label Text = new Label("Message Principal",Label.CENTER);
		add(Text);

		Button sortir = new Button("Aurevoir");
		sortir.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent evenement_2){
				System.exit(0);
			}
		});
		add(sortir);

		pack();
		sortir.setSize(100,100);
		setSize(500,200);
		setVisible(true);
	}

	public static void main(String[] args){
	new creerFenetre2();
	}

}

Code 4 : Exécuter une boucle tant qu’une condition est vraie .


public class bcledo {
	 public static void main(String[] args){
		 int a = 0;
		 do{
			a++;
			System.out.println(a);
		 }
		 while(Math.random()>0.01);
		 System.out.println("Fin du programme.");
	 }

}

Code 5 : Faire de la programmation objet en ligne de commande .


public class Aeronef {

	public int altitude;
	public int vitesse_croisiere;
	public int nombre_de_places;

	/*Méthodes d'instance*/
	public void monter(){
		altitude = altitude+10;
	}

	public void descendre(){
		altitude = altitude-10;
		if (altitude<=0){
			altitude=0;
		}
	}

	/*Méthodes de classe*/

	public static void affiche_fin_prog(){
		System.out.println("Fin du Programme");
	}

	/*Déclarations de Sous Classes*/

	/*La sous Classe Helicoptere :*/
	static class Helicoptere extends Aeronef {//  Hérite de Aeronef

		//proprietes de la classe
		public int vitesse_rotor = 0;// Le mot clef private interdit l'accès à la propriété depuis l'extérieur de l'objet.

	}

	/*La sous classe Avion*/
	static class Avion extends Aeronef { // Hérite de Aeronef
	}

	/*La sous classe Avion à hélice*/
	static class Avion_a_helice extends Aeronef.Avion{ // Hérite de Avion
	}

	/*La sous classe Jet*/
	static class Jet extends Aeronef.Avion{ // hérite de Avion

	}

/*	Fin des déclaration de sous classes */

	/*Début de la méthode Main de la classe Aeronef :*/

	public static void main(String[] args){
		/* Déclaration d'objets syntaxe 1*/
			Helicoptere bell_huey = new Aeronef.Helicoptere();
			Jet airbus  = new Aeronef.Avion.Jet();
		/* Déclaration d'objets syntaxe 2*/
			Avion_a_helice cessna_152;
			cessna_152 = new Aeronef.Avion_a_helice();
		/* Fin de déclaration des objets */

		/*Définition des propriétés pour les objets*/
			cessna_152.nombre_de_places = 4;
			cessna_152.vitesse_croisiere = 160;
			airbus.altitude = 0;
			bell_huey.nombre_de_places = 12;
			bell_huey.altitude = 200;
		/*Fin de la définition des propriétés*/

		/*Début d'une boucle et actions*/
			for (int compteur=0;compteur<10;compteur++){
				/*Appel d'une méthode d'instance*/
				airbus.monter();
				bell_huey.monter();
			}
		/* Fin de la boucle */

		/*Affichage*/
			System.out.println(" Nombre de place d'un cessna 152 = "+cessna_152.nombre_de_places);
			System.out.println("Altitude de l'Airbus = "+ airbus.altitude);
			System.out.println("Altitude du bell_huey = "+ bell_huey.altitude);
			affiche_fin_prog();
	}
/*Fin main*/
}
/*Fin de la Classe Aeronef*/		

CODE 6 : Dessiner un cercle dégradé:

 import java.awt.*;
 import java.awt.geom.*;
 import javax.swing.*;

  public class DegradeCyclique extends JFrame {

     public DegradeCyclique()
     {

        setTitle("Dégradé Cyclique");
        setSize(600, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
     }

     public static void main(String[] args)
     	 {
              new DegradeCyclique();
         }

   public void paint(Graphics g)
   	{
    Graphics2D g2 = (Graphics2D)g;
    Ellipse2D e = new Ellipse2D.Float(40, 40, 120, 120);
    GradientPaint graphic_p = new GradientPaint(75, 75, Color.white,95, 95, Color.gray, true);
    g2.setPaint(graphic_p);
    g2.fill(e);
   }
}

CODE 7 : Créer une fenêtre avec AWT avec des menus .

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;

import javax.swing.JCheckBoxMenuItem;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JRadioButtonMenuItem;


public class ZFenetre extends JFrame {

  private JMenuBar menuBar = new JMenuBar();

  private JMenu test1 = new JMenu("Fichier");

  private JMenu test1_2 = new JMenu("Sous ficher");

  private JMenu test2 = new JMenu("Edition");


  private JMenuItem item1 = new JMenuItem("Ouvrir");

  private JMenuItem item2 = new JMenuItem("Fermer");

  private JMenuItem item3 = new JMenuItem("Lancer");

  private JMenuItem item4 = new JMenuItem("Arrêter");


  private JCheckBoxMenuItem jcmi1 = new JCheckBoxMenuItem("Choix 1");

  private JCheckBoxMenuItem jcmi2 = new JCheckBoxMenuItem("Choix 2");


  private JRadioButtonMenuItem jrmi1 = new JRadioButtonMenuItem("Radio 1");

  private JRadioButtonMenuItem jrmi2 = new JRadioButtonMenuItem("Radio 2");


  public static void main(String[] args){

    ZFenetre zFen = new ZFenetre();

  }


  public ZFenetre(){

    this.setSize(400, 200);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setLocationRelativeTo(null);


    //On initialise nos menus      

    this.test1.add(item1);


    //On ajoute les éléments dans notre sous-menu

    this.test1_2.add(jcmi1);

    this.test1_2.add(jcmi2);

    //Ajout d'un séparateur

    this.test1_2.addSeparator();

    //On met nos radios dans un ButtonGroup

    ButtonGroup bg = new ButtonGroup();

    bg.add(jrmi1);

    bg.add(jrmi1);

    //On présélectionne la première radio

    jrmi1.setSelected(true);


    this.test1_2.add(jrmi1);

    this.test1_2.add(jrmi2);


    //Ajout du sous-menu dans notre menu

    this.test1.add(this.test1_2);

    //Ajout d'un séparateur

    this.test1.addSeparator();

    item2.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent arg0) {

        System.exit(0);

      }        

    });

    this.test1.add(item2);  

    this.test2.add(item3);

    this.test2.add(item4);


    //L'ordre d'ajout va déterminer l'ordre d'apparition dans le menu de gauche à droite

    //Le premier ajouté sera tout à gauche de la barre de menu et inversement pour le dernier

    this.menuBar.add(test1);

    this.menuBar.add(test2);

    this.setJMenuBar(menuBar);

    this.setVisible(true);

  }

}

Code 8 : Afficher un message d’alerte.

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;


public class messageAlerte {

  public static void main(String[] args) {      

    JOptionPane jop1, jop2, jop3;      

    jop1 = new JOptionPane();

    ImageIcon img = new ImageIcon("infos.jpg");

    jop1.showMessageDialog(null, "Message informatif", "Information", JOptionPane.INFORMATION_MESSAGE, img);      

    jop2 = new JOptionPane();

    img = new ImageIcon("images/warning.png");

    jop2.showMessageDialog(null, "Message préventif", "Attention", JOptionPane.WARNING_MESSAGE, img);      

    jop3 = new JOptionPane();

    img = new ImageIcon("images/erreur.png");

    jop3.showMessageDialog(null, "Message d'erreur", "Erreur", JOptionPane.ERROR_MESSAGE, img);            

  }

}

Code 9 : Afficher une fenêtre permettant de choisir une option.

import javax.swing.JOptionPane;


public class choix {

  public static void main(String[] args) {

    String[] sexe = {"masculin", "féminin", "indéterminé"};

    JOptionPane jop = new JOptionPane(), jop2 = new JOptionPane();

    int rang = jop.showOptionDialog(null, 

      "Veuillez indiquer votre sexe !",

      "Gendarmerie nationale !",

      JOptionPane.YES_NO_CANCEL_OPTION,

      JOptionPane.QUESTION_MESSAGE,

      null,

      sexe,

      sexe[2]);

    jop2.showMessageDialog(null, "Votre sexe est " + sexe[rang], "Etat civil", JOptionPane.INFORMATION_MESSAGE);

  }

}