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

  1. 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.
  2. 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.
  3. 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...

  1. Comment allez-vous faire pour récupérer tous les articles de la base de données ? Implémentez une solution.
  2. 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 ?
  3. 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) ?
  4. 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