L’une des forces du langage de programmation Java est sa capacité à implémenter de nombreux types d’applications : web, mobile, backend, etc.
Mais savez-vous ce qu’ont en commun la majorité des applications actuelles ?
Les applications traitent toutes de la donnée ! Que ce soit de la donnée statique (qui ne change pas) ou dynamique (qui peut changer), toutes les applications ont affaire avec les données.
Les développeurs que nous sommes doivent donc être capables de manipuler cette donnée dans le code de l’application, mais également de persister la donnée.
La persistance de données
Persister, qu’est-ce que ça veut dire ?
Dans le contexte des bases de données, persister équivaut à sauvegarder.
La persistance est une notion clé. C’est ce qui permet à votre site web préféré de mémoriser vos identifiants. Grâce à la persistance, vous n’avez plus besoin de recréer un compte systématiquement à chaque visite du site.
D’ailleurs, en tant qu’apprenant, vous êtes également bien placé pour comprendre l’importance de mémoriser de nouvelles informations.
Les humains ont une mémoire qui stocke ou persiste les informations. Mais pour une application, comment cela fonctionne-t-il ?
Pour les applications, il existe des bases de données (BDD).
Les bases de données
De ce fait, les applications collaborent avec des bases de données pour gérer et persister la donnée.
“Eh bien, voilà, persister de la donnée, c’est facile !”
Pas si vite ! Il existe de très nombreux types de bases de données, et une base de données, ce n’est pas du Java.
En fait, faire communiquer un programme Java avec une base de données, c’est comme faire se rencontrer 2 personnes qui ne parlent pas la même langue : difficile de se comprendre !
Alors comment fait-on pour permettre à une application Java de communiquer avec une base de données ?
C’est précisément à cette question que ce cours va répondre ! Je vais vous montrer comment permettre à une application Java d’interagir avec une base de données.
Les différents types de bases de données
Cependant, nous l’avons dit, il existe de nombreux types de bases de données.
Commençons par les répartir en 2 catégories :
Les bases de données relationnelles.
Les bases de données NoSQL.
Les bases de données relationnelles sont omniprésentes et fournissent une approche de la structure de la donnée en table de données. Le langage nommé SQL (Structured Query Language) permet d’interagir avec ce type de bases. Nous verrons comment dans ce cours.
Les bases de données NoSQL présentent une approche différente des bases de données, face aux problématiques de disponibilité de la donnée qui ont émergé ces dernières années. Je ne vous apprendrai pas à communiquer avec, c’est un monde à part entière, et ce cours se concentre sur les bases de données relationnelles.
Je vais maintenant vous présenter le pilier de toute communication entre un programme Java et une BDD relationnelle.
Allez, c’est parti ! 🙂
Utilisez JDBC pour communiquer avec une BDD
Face à la multitude des bases de données existantes (Oracle, SQL Server, PostgreSQL, MySQL et bien d’autres), une solution globale s’est avérée nécessaire.
Au sein du langage Java, cette solution est l’API JDBC (Java Database Connectivity). Cette API est un ensemble de classes permettant de communiquer avec des bases de données, indépendamment du modèle de bases de données utilisé.
Comment est-ce possible ?
Notez le schéma ci-dessous :
En tant que développeur Java, vous allez travailler sur la brique “Application Java” de ce schéma. L’API JDBC vous servira d’interface pour communiquer avec une base de données.
Et comment l’API JDBC peut-elle gérer la multitude de BDD existantes ?
L’API utilise des drivers correspondant à chaque BDD.
Ainsi, vous n’avez quasiment pas à vous préoccuper du type de bases de données. Ce qui compte, c’est de savoir utiliser l’API JDBC !
L’API JDBC vous permet de :
Vous connecter à une base de données.
Exécuter des requêtes SQL sur cette base de données.
Traiter les réponses fournies par la base de données à vos requêtes.
Excellent, n’est-ce pas ? 🙂
Voici un exemple de code utilisant l’API JDBC pour connecter l’application Java à une base de données MySQL :
package com.openclassrooms;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLManager {
private static MySQLManager instance = null;
private Connection connection = null;
private String url = "jdbc:mysql://localhost:3306/application";
private String utilisateur = "root";
private String motDePasse = "";
public Connection getConnection() {
return connection;
}
public static synchronized MySQLManager getInstance() {
if (instance == null) {
instance = new MySQLManager();
}
return instance;
}
private MySQLManager() {
try {
Class.forName("com.mysql.jdbc.Driver");
this.connection = DriverManager.getConnection(url, utilisateur, motDePasse);
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
@Override
protected void finalize() throws Throwable {
super.finalize();
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
}
}
}
}
OK, mais on peut en savoir plus sur JDBC ?
En fait, non. Ce cours n’a pas pour objectif de vous apprendre à interagir avec une base de données grâce à l’API JDBC !
Mais pourquoi nous raconter tout ça, alors ??
Tout simplement pour vous contextualiser ce que nous allons vraiment utiliser : un framework ORM !
Utilisez un framework ORM
Un framework est un cadre de travail existant sur lequel on peut s’appuyer pour mener à bien cette opération. ORM signifie Object-Relational mapping.
Ainsi, un framework ORM crée un pont entre 2 mondes :
D’un côté l’approche objet induite obligatoirement par le langage Java.
De l’autre côté, l’approche relationnelle que l’on retrouve au sein des bases de données.
Le framework ORM offre une abstraction permettant aux développeurs Java de manipuler uniquement des objets sans avoir besoin (ou quasiment pas besoin) de faire du SQL !
En effet, le framework va générer les requêtes SQL et être capable d’effectuer de nombreuses opérations sur la base de données, en fonction du code objet que vous implémentez.
Grâce au framework ORM, vous réduisez la quantité de code à produire, vous réduisez les risques d’erreurs dus à la production de ce code SQL, et vous augmentez la qualité de votre programme.
Mais comment ça fonctionne ?
En Java, les frameworks ORM se basent sur une spécification nommée JPA (Java Persistance API). Cette spécification est une API qui décrit les comportements nécessaires au bon fonctionnement d’un framework ORM.
Grâce à ces spécifications, de nombreuses implémentations ont vu le jour, comme :
EclipseLink ;
Spring Data JPA ;
OpenJPA ;
Hibernate.
Dans ce cours, vous allez apprendre à utiliser Spring Data JPA pour interagir avec une base de données relationnelles !
Pourquoi celle-ci ?
Il y a 3 raisons qui ont motivé ce choix :
Sa simplicité : vous pourrez acquérir la compétence sans (trop) souffrir !
C’est un composant Spring, et le framework Spring est un excellent framework pour implémenter des applications Java robustes et performantes.
Il n’y a qu’un pas après avoir appris Spring Data JPA pour apprendre Hibernate, un autre framework ORM très utilisé sur le marché.
Mais quel est le lien avec JDBC ?
Les frameworks ORM suivent la spécification JPA et exploitent l’API JDBC. À titre d’exemple, les frameworks ORM n’échappent pas à la nécessité d’établir une connexion à la base de données ni à l’utilisation des drivers, en fonction du type de bases de données.
Donc vous devez savoir que l’API JDBC existe (et pourquoi pas, un jour, apprendre à l’utiliser si vous le désirez), puis comprendre le fonctionnement d’un framework ORM.
À la fin de ce cours, vous serez ainsi capable d’implémenter une application Java qui communique efficacement avec une BDD !
Identifiez les opérations CRUD
Et c’est là l’occasion pour moi de vous fournir une première clé de l’approche ORM. Nous allons catégoriser nos interactions avec la BDD selon le modèle CRUD, dont vous avez peut-être entendu parler. Si ce n’est pas le cas, je vous invite à consulter le cours Implémentez vos bases de données avec SQL.
Comprendre et implémenter un CRUD permet de traiter les données efficacement au sein d'une application Java. C’est sous cet angle que nous allons apprendre à manipuler le framework Spring Data JPA.
Que vous manque-t-il ? Un cas pratique, bien sûr !
Implémentez une application Java pour le site Internet de CarLib Assurances
Tout au long de ce cours, vous allez implémenter une application Java pour le site d’assurance en ligne CarLib Assurances.
Vous apprendrez à gérer :
Les produits associés à la catégorie “assurance auto”.
Les clients qui achètent ces produits.
Les commentaires des clients sur les produits vendus.
Nous utiliserons une base de données MySQL, et je vais vous fournir le schéma de la base de données (en effet, ce cours n’a pas pour vocation la conception de base de données), ainsi qu’un jeu de données.
Étant donné que nous nous concentrons sur la couche d’accès aux données, également appelée Data Access Layer, nous n’implémenterons pas l’interface graphique. Nous nous servirons de la console pour obtenir un visuel des opérations effectuées.
En résumé
Il est indispensable de savoir faire communiquer une application Java avec une base de données.
Java dispose de l’API JDBC, de la spécification JPA et de frameworks ORM pour interagir avec une base de données.
Spring Data JPA est un framework ORM performant qui vous permet d’interagir avec une base de données.
Alors, êtes-vous prêt ? Retrouvez-moi au prochain chapitre pour mettre en place votre environnement de développement !