Tutoriel Spring N°4.1 : Accès données avec Spring JDBC

Avec Objis, spécialiste formation Spring , maîtrisez l’utilisation de Spring JDBC pour créer rapidement votre couche d’accès aux données JDBC (DAO). Utilisez les classes JdbcTemplate et JdbcDaoSupport fournies par Spring. Comparez la configuration de l’injection de dépendances avec XML et avec les annotations @Repository. Mettez en pratique les deux concepts clés de framework Spring : injection de dépendances et la programmation orientée aspects.

Objectifs

- 1 : Maîtriser la valeur ajoutée de Spring pour l’accès aux données. En particulier :
— Diminution de la taille du code, grâce à classes fournies par Spring.
— Gestion des exceptions réalisée par Spring pour vous.
- 2 : Mettre en œuvre de bonnes pratiques Spring JDBC. Par exemple :
— Configurer la source de données (DataSource) JDBC comme un bean Spring et l’injecter à l’exécution.
— Utiliser le bean PropertyPlacerConfigurer afin de mettre les informations de connexion dans un fichier de propriétés
- 3 : Injecter les classes Templates proposés par SPRING
— JdbcTemplate et variantes (SimpleJdbcTemplate, NamedParamJdbcTemplate)
- 4 : Créer vos DAO en étendant la Classe JdbcDaoSupport de SPRING
- 5 : Annoter vos classes DAO via @Repository

Programme

- Partie 1 : cours et analyse
- Partie 2 : création et Alimentation base de données
- Partie 3 : projet eclipse ’demospringdatabase’
- Partie 4 : beans d’accès aux données
- Partie 5 : domaine Métier
- Partie 6 : Mise en oeuvre ’JDBC pur’ dans Spring
- Partie 7 : Mise en oeuvre JdbcTemplate
- Partie 8 : Mise en oeuvre @Repository

Durée

2h.

Partie 1 : Analyse

Questions

En utilisant l’API (javadoc) de Spring ainsi que la documentation officielle :
- Citez 4 packages Spring impliqués dans l’abstraction Spring JDBC
- Roles et responsabilités de ces packages ?
- Citez les classes et interfaces au cœur de l’API.

Partie 2 : Création et Alimentation base de données

Installation Wamp5

- Téléchargez et installez WAMP , serveur Apache2/PHP5/MYSQL5 sous Windows

Données de test

- Cliquez gauche sur l’icône de Wamp, puis lien ’PhpMyAdmin’. L’interface d’administration de PhpMyadmin apparaît

- Créez une base de données nommée ’formation’ . Pour cela tapez ’formation’ dans la zone de champ texte ci-dessus et appuyez sur bouton ’créer’. l’écran suivant apparait.

- Importez dans la base le fichierformation.sql. Pour cela sélectionnez l’onglet ’importer’ de WAMP ...

... puis cliquez sur le bouton ’parcourir’. Chercher l’endroit ou vous avez téléchargé le fichier.

Après avoir identifié le fichier, appuyez sur le bouton ’Exécuter’.

Le script crée une table (employe) et y insere 3 enregistrements.Après Importation des données, vous obtenez l’écran suivant.

Après avoir cliqué sur le lien associé à la table employé (menu gauche), l’onglet ’Afficher’ permet de voir les données de la table.

L’étape de création de la base de données et de création de données est terminée. Prochaine étape : création d’un projet eclipse pour notre développement.

Partie 3 : projet eclipse ’demospringdatabase’

Création du projet Spring

Avec Eclipse, à l’aide du plugin SpringIDE, créez un projet Spring nommé ’demospringdatabase’ . :
- File/new Project/
- Spring/Spring project
- Nom : demodatabase. Puis Finish

Installation des librairies Spring
- Créez un répertoire ’lib’ à la racine du projet (Click droit sur le projet / New / Folder). Ce répertoire servira à mettre toutes librairies necessaires.

- Bouton Finish.

Installation librairies Spring 4.

PNG - 43 ko
librairies

Installation librairie driver JDBC

- Ajoutez le driver de la base de données mysql-connector-5.jar. Pour l’avoir, téléchargez et dézippez le fichier mysql-connector-java-5.0.5.zip . Le jar se trouve à la racine du dossier.

Installation libairies Pool de connection

Ajoutez les librairies du pool de connexion DBCP .

Pour Spring 4.x, téléchargez commons-dbcp et commons-pool et récupérez les dernières versions des jars commons-dbcp.jar et commons-pool.jar

Configuration Log4j

- Ajouter la librairie log4j.jar présent dans SPRING_HOME\lib\log4j.
— dans le répertoire ’src’ du projet, ajoutez l’exemple de fichier log4j.xml fournit et
- Ajoutez toutes les librairies du répertoire lib dans le ’build path’ d’Eclipse : Menu project/properties/Librairies/Add jars.

PNG - 64.9 ko
log4j

Fichier de déclaration des beans
- En utilisant l’assistant de création de bean Spring, créez à la racine ’src’ du projet ’demospringdatabase’, un fichier spring-data.xml qui sera dédié à la définition de beans relatifs à la base de données. En cas de difficultés de création du fichier, voir le Tutoriel ’Injection de dépendences

Partie 4 : beans d’accès aux données

Configuration propriétés de la base de données
- Créez le package com.objis.spring.demodatabase
- Créez dans le package com.objis.spring.demodatabase un fichier db.properties contenant des informations de connexion en base de données :
— url de connexion
— login
— password
— Driver

- Déclarez dans spring-data.xml un bean de type PropertyPlaceholderConfigurer, qui assure la récupération dynamique des informations présentes dans le fichier de propriété db.properties

Déclaration beans ’datasource1’ et ’datasource2’
- Dans le fichier spring-data.xml, déclarez 2 beans ’datasource1’ et ’datasource2’ correspondant à 2 types de configuration de la base de données
— ’datasource1’ : configuration via la classe org.springframework.jdbc.datasource.DriverManagerDataSource, avec information d’accès à la base (URL, Driver ; login, pwd) écrites ’en dur’ dans le fichier XML
— ’datasource2’ : configuration via classe org.apache.commons.dbcp.BasicDataSource, (de Apache DBCP DataBase Connexion Pool) avec informations d’accès à la base récupérées d’un fichier de propriété : db.properties du package com.objis.spring.demodatabase

- Quelle est la ’meilleure pratique’ entre ces 2 dataSources ? Pourquoi ?

Partie 5 : Domaine Métier

Dans cette partie, vous crééez le Bean ’Employe’ possédant les attributs correspondants aux champs de la base de données :
— ID
— login
— password
— nom
— prenom
— email
— rôle

Enregistrement d’un employé en Base de données
- Dans Eclipse, créez le package ’domaine’
- Dans le package domaine, et en utilisant assistant Eclipse (Cliquez droit sur le code + Source/Generate...) créez pour le bean Employe ainsi que :
— un constructeur sans paramètre : Employe()
— un constructeur avec les 7 paramètres : Employe( int,String,String,String,String,String)
— Getters/Setters pour chaque propriété de la classe Employe

Partie 6 : Mise en oeuvre JDBC pure dans Spring

Dans cette partie vous analysez l’utilisation de Spring avec JDBC pure.

- Ajoutez la librairie JUnit dans le répertoire ’lib’ puis dans le ’build path’ Eclipse.
- importez dans le package com.objis.spring.demodatabase le fichier EmployeDao.java

EmployeDao implémente les méthodes :
— saveEmploye() : Enregistrement d’un employé en base, avec méthode JDBC pure
— getEmployebyId() : récupération d’un objet Employe à partir de son id

Analysez le code suivant du Dao :

PNG - 8.7 ko
injection-datasource-spring-jdbc

- Expliquez.

Ci-dessous méthode saveEmploye().

PNG - 23.2 ko
injection-datasource-spring-jdbc-2

- Analysez le code de ces méthodes.

- Expliquez.

- Ajoutez le bean DAO dans le conteneur

PNG - 4.7 ko
injection-datasource-spring-jdbc-4

- Expliquez la relation entre le DAO et la DataSource

- importez dans le package com.objis.spring.demodatabase.test le fichier TestSpringJDBC.java fournis.

PNG - 19.5 ko
injection-datasource-spring-jdbc-3

Ci-dessous l’arborescence du projet :

- Testez la méthode saveEmploye. Pour cela cliquez droit sur la méthode testSaveEmploye() de TestSpringJDBC puis Run as JUnit Test.

- Analysez les résultats du test : création d’un nouvel enregistrement en base de données.

- Testez la méthode getEmployeById. Pour cela cliquez droit sur la méthode testGetEmployeById() de TestSpringJDBC puis Run as JUnit Test.

- Analysez les résultats du test : création d’un objet employe non Null.

Correction

TELECHARGEZ le PROJET

Zip - 4.6 Mo
demospringjdbc-Dao-Version1

Partie 7 : Mise en oeuvre JdbcTemplate

Spring propose la classe JdbcTemplate pour vous simplifier l’accès à une base de données en Java. 2 avantages :
— 1) Moins de code à écrire dans votre DAO. En particulier plus besoin des try/catch. Top non ?
— 2) Meilleure Gamme d’exceptions : au lieu de vous retourner des ’SQLException’ en cas d’Erreur Spring vous renvoie une exception personnalisée plus précise.

- Ajoutez l’interface suivante qui devra être implémentée par la classe EmployeDao2 (notre nouvelle version de DAO).

PNG - 10 ko
injection-Template-spring-jdbc-0

- Déclarez un bean JdbcTemplate dans le fichier de configuration de Spring

- Créer une classe EployeDao2 et déclarez une propriété de type JdbcTemplate

PNG - 9.9 ko
injection-Template-spring-jdbc-1

- Implémentez dans SpringJDBC la saveEmployeJdbcTemplate() : Enregistrement d’un employé en base, avec Template jdbcTemplate, fourni par SPRING

PNG - 12.6 ko
injection-Template-spring-jdbc-2

- Déclarez votre EmployeDao2 dans le conteneur

PNG - 4 ko
injection-Template-spring-jdbc-3

- Ecrivez une méthode de test JUnit associée à la méthode saveEmployeJdbcTemplate()

Correction

Zip - 4.6 Mo
demospringdaoTemplatejdbc

A VOUS DE JOUER : à partir de la documentation de JdbcTemplate, complétez l’implémentation de l’interface par le Dao. En particulier, codez les méthodes getEmployeByLogin(), getEmployesCount() et getAllEmployes().

Partie 8 : Annotations Spring @Repository

Depuis Spring 2.0, l’utilisation des annotations à l’intérieur du code des beans contribue à une réduction du code XML de configuration de ces beans dans le fichier de définition XML. En particulier, les annotations @Repository (couche persistence), @Controller (couche web) et @Service (couche service) sont spécifique à Spring et héritent de l’annotation @Component de la spécification JEE (JSR 250).

REMARQUE : la translation d’exceptions représente une valeur ajoutée de la configuration des beans par annotations par rapport à la configuration XML.

A partir de la version 2, spring peut détecter des classes annotées, grace à la balise ’’. Cela nécessite la déclaration dans le fichier de déclaration des beans du namespace context.

- Annotez le DAO EmployeDao , en utilisant l’annotation @Repository.

Optimisation du fichier spring-data.xml

Nous allons modifier le fichier spring-data.xml de façon à ce que Spring tienne compte des annotations réalisées dans les beans.

- Déclarez le namespace ’context’.
- Informez SPRING du lieu ou se trouvent vos classes annotées (’’).
- Informez SPRING de votre stratégie d’Autowiring par défaut (default-autowire) pour tous les beans déclarés.

Ces actions sont réalisées dans le schéma ci-dessous :

- Commentez la déclaration du DAO EmployeJdbcDaoSupport dans spring-data.xml

Tests DAO

- Testez à nouveau l’accès aux données (méthodes testSaveEmploye et testGetEmployeById)

Le code de le classe de test est le suivant :

Les résultats :

TELECHARGEZ le PROJET ECLIPSE CORRIGE POUR @Repository

Gestion des exceptions

- Mettez en évidence la valeur ajoutée du mécanisme de translation d’exceptions de Spring

Partie 9 : Ajout couche Service

- Ajoutez dans un nouveau package le code d’une classe couche Service qui utilise une propriété de type Interface IEmployeDao.

PNG - 15.9 ko
tutoriel-spring-jdbc-ajout-couche-service5

- Injectez un DAO dans la couche service.

- Mettez en évidence un cas de conflit : Spring ne sait pas quel DAO injecter parmi les 2 DAOs qui implémentent l’interface.

- Proposez 2 stratégies pour gérer ce cas de conflit :
— > Stratégie 1 basée sur l’annotation @Repository (donner en paramètre de Repository un nom qui est le même que la propriété de la couche Service)
— > Stratégie 2 basée sur l’annotation @Qualifier à ajouter dans la couche Service (donner en paramètre un des noms donnés aux DAO via Repository)

Zip - 4.5 Mo
demoservicedao

Conclusion

Dans ce tutoriel, vous avez pratiqué la mise en oeuvre de l’intégration de Spring avec une base de données relationnelle.

Devenez certifié ’Développeur Concepteur Java’

Exprimez-vous comme un développeur professionnel. Utilisez les bons mots au bon moment. Concevez et développez avec assurance des applications Java Web Mobile. Rassurez vos futurs employeurs et clients. Devenez Certifié ’Développeur Concepteur Java’ Objis. + d’informations.

PNG - 214.3 ko
formation-java-distance-objis-3