JEE JDBC
Définitions
Exigences de l'Application 1. Ajout du pilote JDBC de MySQL dans NetBeans :
Maeven Fonctionnelles : Pour se connecter à une base de données MySQL, il est nécessaire d'ajouter le pilote JDBC correspondant au projet
Outil de gestion de projet pour automatiser la production de logiciels Java. Répondre aux besoins métiers. NetBeans.
Objectifs : Automatiser la compilation, les tests, la gestion des dépendances et la production des packages livrables. Assure un ordre Techniques : Téléchargez le fichier jar du pilote JDBC de MySQL et ajoutez-le aux dépendances du projet.
correct d'exécution des tâches pour garantir la qualité du logiciel. Performances : Temps de réponse optimisés, architecture distribuée et scalable, équilibrage de charge, 2. Processus de connexion et d'exécution des requêtes SQL :
Project Object Model (POM) : Le POM, fichier XML central dans Maven, décrit le projet, ses dépendances, les plugins utilisés et les tolérance aux pannes. Charger la classe du driver dans la mémoire.
configurations spécifiques nécessaires au processus de build. Maintenance : Facile à maintenir, évolutive, fermée à la modification, ouverte à l'extension. Établir la connexion avec le serveur en utilisant la méthode getConnection de java.sql.DriverManager.
Sécurité : Solutions pour toutes les failles, gestion des transactions, persistance des données. Créer et exécuter les requêtes SQL (SELECT, UPDATE, etc.).
ORM
Accessibilité : Support Web, Mobile, Desktop. Fermer le statement et la connexion après utilisation pour libérer les ressources.
Technique de programmation qui facilite la manipulation des données en utilisant des objets plutôt que des requêtes SQL directes.
Financières : 3. Requêtes de mise à jour :
Objectifs :
Respecter les contraintes budgétaires. Utiliser Statement.executeUpdate(code_sql) pour les requêtes de création, suppression ou mise à jour de données.
Faciliter la manipulation des données en utilisant des objets plutôt que des requêtes SQL.
Architecture d’une Application La méthode retourne le nombre de lignes affectées par la requête.
Automatiser le mapping entre les objets dans le code et les tables dans la base de données.
L'architecture JEE est une architecture utilisée pour développer des applications web d'entreprise. Elle comprend 4. Requêtes paramétrées :
Fonctionnement :
des technologies pour le développement backend (JEE, Spring, EJB) et frontend (HTML, CSS, JavaScript) ainsi que Utiliser PreparedStatement pour sécuriser les requêtes en remplaçant les valeurs par des paramètres (?).
Entités : Les objets du code (entités) sont liés aux tables de la base de données.
des protocoles de communication (HTTP, SOAP, REST). Initialiser les paramètres avec les méthodes setInt, setString, etc.
Annotations ou XML : Les configurations de mapping sont souvent définies via des annotations ou des fichiers XML.
5. Requêtes SELECT :
CRUD : Fournit des méthodes pour créer, lire, mettre à jour et supprimer des données sans écrire de SQL.
SGBD : Utiliser ResultSet pour récupérer les résultats des requêtes SELECT.
Frameworks : Hibernate, JPA (Java Persistence API)
Stockage des données : SGBD relationnels (SQL Server, MySQL, Oracle) ou NoSQL (MongoDB). Parcourir les résultats ligne par ligne et récupérer les valeurs des colonnes par leur nom ou indice.
Inversion de Contrôle (IoC) 6. Récupération des clés générées par auto-incrémentation :
Principe de conception dans lequel le contrôle de l'exécution d'un programme est inversé ou délégué à un framework ou un conteneur qui Serveur d’application : Utiliser Statement.RETURN_GENERATED_KEYS lors de la création de PreparedStatement pour récupérer les valeurs
gère les dépendances entre les composants. Déploiement et gestion : Serveurs comme JBoss, GlassFish, WebSphere, Tomcat+Spring. des clés générées automatiquement après une insertion.
Objectifs : Frameworks IoC : Spring IoC, EJB. 7. ResultSets modifiables :
Déporter la responsabilité de la gestion des dépendances et de la configuration des composants à un conteneur IoC. Couche Métier : Utiliser un ResultSet modifiable pour effectuer des opérations CRUD directement sur les données récupérées.
Permettre une meilleure modularité, réutilisation et testabilité du code. Logique métier : Approche orientée objet. Cette méthode consomme plus de ressources mémoire et il est souvent préférable d'utiliser la méthode
Avantages : Couche DAO : traditionnelle pour les opérations CRUD.
Simplification : Réduit le couplage entre les composants en les rendant moins dépendants des détails d'implémentation. Accès aux données : Frameworks ORM (Hibernate, TopLink) avec JPA.
Flexibilité : Facilite le changement des implémentations de composants sans modifier le code client. Couche Web :
Testabilité : Permet l'injection de dépendances factices (mocks) pour faciliter les tests unitaires. Présentation Web : Frameworks MVC (Spring MVC, Struts, JSF).
JSP
JDBC pour MySQL Génération de réponses HTML avec Thymeleaf. 1. Expressions JSP
API de bas niveau qui permet aux apps Java de se connecter à une BD, d'exécuter des requêtes SQL et de traiter les résultats. Web Services : Syntaxe : <%= expression %>
Fournit un ensemble de classes et d'interfaces pour interagir avec les BDs relationnelles et effectuer des opérations CRUD. SOAP : Requêtes et réponses XML (JAX-WS). Utilisation : Pour afficher une valeur directement dans la réponse HTML.
RESTful : Requêtes HTTP, réponses JSON/XML (JAX-RS). 2. Déclarations
Hibernate Syntaxe : <%! ... %>
Middlewares :
Outil ORM qui convertit les classes Java en tables de base de données et les objets Java en lignes de ces tables. Utilisation : Pour définir des méthodes et des attributs accessibles dans toute la servlet générée.
RMI : Applications distribuées Java.
Utilités: 3. Directives
CORBA : Applications distribuées hétérogènes.
Permet de manipuler les données de la base de données en utilisant des objets Java sans avoir à écrire du code SQL. Syntaxe : <%@ ... %>
JMS/AMQP : Applications distribuées asynchrones.
Gère automatiquement les opérations CRUD (Create, Read, Update, Delete) et les transactions. Types :
IoC Container :
Avantages/Buts: <%@ page ... %> : Pour configurer la page JSP.
Inversion de contrôle : Services techniques (sécurité, transactions, ORM) via Spring IoC.
Simplification de la gestion des bases de données <%@ include ... %> : Pour inclure une autre ressource JSP dans la page courante.
Portabilité et indépendance de la base de données 4. Scriptlets
Clients :
JPA Syntaxe : <% ... %>
Client HTTP : Requêtes HTTP, réponses HTML/CSS/JavaScript.
Spécification qui définit les normes pour le ORM en Java, permettant de convertir des objets Java en tables de base de données et vice versa. Utilisation : Pour insérer du code Java directement dans la servlet générée.
Client Web (Riche) : Requêtes Ajax, réponses JSON, affichage avec AngularJS, jQuery.
Elle standardise les approches de persistance utilisées par les frameworks ORM comme Hibernate, en fournissant une API commune. 5. Actions
Client Mobile : Requêtes HTTP, réponses JSON, affichage mobile.
Utilités: Syntaxe : <jsp:tagName ... />
Client Lourd : Communication via RMI (Java) ou CORBA (autres langages).
Permet de manipuler les données de la base de données en utilisant des objets Java sans avoir à écrire du code SQL. Exemples :
Client SOAP : Communication via SOAP (HTTP+XML).
Gère automatiquement les opérations CRUD (Create, Read, Update, Delete) et les transactions. <jsp:include page="..." /> : Pour inclure dynamiquement une autre page.
Avantages/Buts: <jsp:forward page="..." /> : Pour rediriger la requête vers une autre page.
Simplification de la gestion des bases de données <jsp:useBean ... /> : Pour instancier un JavaBean.
Portabilité et indépendance de la base de données
HTTP SERVLET JSP <jsp:setProperty ... /> : Pour définir les propriétés d'un JavaBean.
Servlets Architecture Web JEE <jsp:getProperty ... /> : Pour obtenir et afficher les propriétés d'un JavaBean.
Classe Java qui répond aux requêtes HTTP et génère des réponses, généralement au format HTML. 6. JSTL (Java Standard Tag Library)
Cycle de vie: Librairies : Core, Format, XML, SQL, Functions
init(): Initialisation du servlet. Utilisation : Pour effectuer des opérations courantes comme les boucles, les tests conditionnels, le formatage de
service(): Traitement des requêtes HTTP : texte, etc., sans nécessiter de code Java directement dans la page JSP.
doGet(HttpServletRequest request, HttpServletResponse response) : Traite HTTP GET. Utilisée pour récupérer des données.
doPost(request, response) : TraiteHTTP POST. Utilisée pour envoyer des données au serveur.
doPut(request, response) : Traite HTTP PUT. Utilisée pour mettre à jour des ressources.
doDelete(request, response) : Traite HTTP DELETE. Utilisée pour supprimer des ressources. JPA
destroy(): Nettoyage avant la destruction du servlet. @Entity : Définit que la classe est une entité JPA, ce qui signifie qu'elle est mappée à une table dans la base de données.
JSP (JavaServer Pages) @Table : Permet de spécifier le nom de la table dans la base de données à laquelle l'entité est mappée, ainsi que d'autres
Permettent de générer dynamiquement des pages HTML en utilisant des balises et des scripts Java et sont compilées en servlets par le serveur propriétés de la table comme le schéma et le nom de la catalog.
web lors de leur première utilisation. @Id : Déclare l'attribut comme une clé primaire de l'entité.
Formée par les éléments : @GeneratedValue : Spécifie la stratégie de génération de valeur pour les clés primaires. Par exemple,
Les expressions GenerationType.AUTO, GenerationType.IDENTITY, GenerationType.SEQUENCE, etc.
Les déclarations 1. Le client envoie une requête HTTP de type GET ou POST vers le contrôleur représenté par un composant Web JEE : @Transient : Indique qu'un attribut n'est pas mappé à la base de données.
Les directives @ManyToOne, @OneToMany, @OneToOne, @ManyToMany : Définit les relations entre les entités.
SERVLET. Pour lire les données de la requête HTTP, le contrôleur utilise l'objet request de type HttpServletRequest. FetchType.LAZY : L’attribut est chargé uniquement au moment de l’accès, et non lors du chargement initial de l’objet.
Les scriptlets
Les actions 2. Le contrôleur fait appel à la couche métier pour effectuer les traitements et récupère les résultats R. FetchType.EAGER : L’attribut est chargé initialement lors du chargement de l’objet.
Les JSTL optional = true : Décider si la multiplicité est 0..1 (optional = true) ou 1..1 (optional = false). Dans le cas de la valeur true, la
3. Le contrôleur stocke le résultat R dans le modèle M. Le modèle est généralement un objet qui permet de stocker colonne de la clef étrangère peut accepter la valeur null.
JSTL mappedBy : spécifier l'entité propriétaire (ou "owner") d'une relation bidirectionnelle (One-to-Many)
toutes les données qui seront affichées dans la vue. Le contrôleur stocke le modèle dans l'objet request ou session.
Implémentation qui décrit plusieurs actions basiques pour les applications web J2EE. Elle propose un ensemble de librairies de tags pour le
@JoinColumn : Spécifie la colonne de jointure pour les relations entre entités.
développement de pages JSP 4. Le contrôleur fait appel à la vue JSP (Java Server Pages) en lui transmettant les mêmes objets request et response.
@Inheritance : utilisée pour spécifier la stratégie d'héritage entre les classes entité
But : Simplifier le travail des auteurs de page JSP, c'est à dire la personne responsable de la couche présentation
Cette opération s'appelle Forwarding. Single Table (InheritanceType.SINGLE_TABLE) : Toutes les entités de la hiérarchie sont stockées dans une seule table
Thymeleaf 5. La vue JSP récupère le résultat à partir du modèle. La vue retrouve le modèle dans l’objet request ou session.
avec une colonne discriminante.
Moteur de templates pour Java, principalement utilisé pour créer des vues web dynamiques. Il permet de combiner des modèles HTML avec Joined (InheritanceType.JOINED) : Chaque sous-classe a sa propre table et utilise des clés étrangères pour les relations.
des données dynamiques provenant des applications Java. 6. La vue JSP génère dynamiquement une page HTML qui contient les résultats du modèle en utilisant l’objet response. Table per Class (InheritanceType.TABLE_PER_CLASS) : Chaque sous-classe a sa propre table sans relation entre elles.