Cours "Bases de données avancées"
DAO
Home (Contact)
Objectif du TP :
En utilisant le modèle de conception DAO, implémenter en Java
une des stratégies de mapping étudiée dans le TP précédent.
Support de cours
Description du problème et création des tables
Il est intéressant d'utiliser des DAO pour séparer la gestion
de la persistance du reste d'une application. Il sera ainsi plus facile de
changer de SGBD. Les DAO permettent aussi de factoriser le code lié à la persistance
en le plaçant à un seul endroit de l'application.
Le code contenu dans ce fichier zip contient une partie de l'implémentation
en Java du diagramme de classes fourni
dans le TP sur le mapping. Pour simplifier ce TP, les lots et les factures
ne seront pas pris en compte, ni pour la création des tables de la base de
données, ni pour le code Java.
Dans ce TP vous utiliserez la stratégie de mapping "une
seule table par arborescence d'héritage "
pour traduire l'héritage du modèle objet.
Créez les tables qui seront utilisées pour la persistance des
stylos et des ramettes. Vous
devriez avoir déjà fait le gros du travail dans le TP précédent.
Correction
Création des tables
DAO simplifié pour les stylos
- Ajoutez la classe DaoStylo pour implémenter
la persistance des stylos vendus dans le magasin.
Voici la méthode main qui
utilisera ce DAO. Vous mettrez les DAO dans la paquetage fr.unice.article.dao.
Ce DAO sera utilisé en local et il ne sera donc pas utile d'utiliser
des DTO pour transférer les données entre les différentes
couches de l'application.
Comme il est préconisé dans le cours, vous envelopperez les exceptions spécifiques
au support de persistance avec des exceptions non spécifiques DaoException.
Pour commencer, faites simple.
Vous pouvez utiliser une nouvelle connexion et transaction pour chaque
méthode du DAO. N'implémentez que
les méthodes utiles pour faire exécuter la
méthode main. Quand
vous aurez fini le TP vous pourrez compléter
et améliorer ces classes s'il vous reste du temps.
Voici un squelette de classe que vous pouvez utiliser pour gagner du temps.
- Faites exécuter la méthode main une
première fois. Modifiez ensuite les
articles créés dans la méthode main et
testez si vous pouvez retrouver les articles créés la première
fois avec les méthodes du DAO.
- Avez-vous géré les cas où le code essaie d'ajouter
un stylo qui existe déjà
dans la base ? La méthode main doit afficher un message d'erreur et
continuer son exécution. Testez.
Correction
DAO pour les stylos
DAO pour les ramettes
Ajoutez un DAO pour les ramettes. Le plus simple est de copier le DAO pour
les stylos et de modifier juste ce qu'il faut pour l'adapter aux ramettes.
Correction
DAO
pour les ramettes
Tout n'est pas si simple...
- Comment allez-vous faire pour récupérer tous les articles de la base de
données ? Implémentez une solution.
- Si vous n'utilisez pas un pool de connexions, comment pourriez-vous faire
pour ne pas avoir à créer une nouvelle connexion pour chaque méthode
des DAO ?
- Testez ce code. Qu'en pensez-vous
? S'il s'affiche "Les 2 stylos
sont les mêmes ? false",
comment pourriez-vous modifier votre code pour ne pas risquer d'avoir en
mémoire plusieurs objets qui représentent les mêmes données
dans la base (ce qui peut provoquer des pertes de données) ?
- Pour simplifier, toutes les propriétés des articles ont des
accesseurs publics. Que faudrait-il faire si certaines des propriétés
des objets persistants n'avaient pas d'accesseur public ?
Correction
Toutes les classes
Sans accesseur public
Pour ceux qui ont déjà fini...
Modèle "fabrique abstraite" pour les DAO
Utilisez le modèle de conception "fabrique abstraite" pour
permettre de changer facilement de support de persistance.
Si vous n'avez pas le temps d'écrire le code, faites au moins valider
un schéma UML par l'enseignant qui encadre votre TP.
Retour