Accès JDBC à une base de données via un patron DAO

Dans ce TP, nous allons reprendre le TP précédent pour implémenter des requêtes SQL vers une base de données en utilisant le framework JDBC et en suivant le patron DAO (Data Access Object) et d'autres patrons de conception (fabrique, fabrique abstraite et singleton).

L'archive sources-SportDAO.zip contient l'exemple de code JDBC/DAO vu en TD permettant d'accèder à une base de données ayant le schéma suivant définissant des sports composés de disciplines :

sport(integer code_sport, varchar intitule)
discipline(integer code_discipline, varchar intitule, integer code_sport)

Travail à réaliser :

  1. Créez un projet Java, intégrez le code de l'archive et modifiez le contenu du fichier sportsDAO/configJDBC.xml pour préciser l'URL de connexion au serveur Oracle et vos identifiants. Ajoutez la librairie du driver Oracle dans votre projet.
  2. Testez et modifiez le programme TestDAO.java pour remplir votre nouvelle base et accèder à son contenu. Etudiez le contenu des classes gérant les DAO et les fabriques.
  3. Complétez le code manquant du DAO de disciplines (classe sportsDAO/DAODiscipline.java).
  4. Les 4 méthodes d'un DAO générique peuvent être limitées pour certains besoins. Par exemple, on aimerait pouvoir récupérer une instance d'un sport via son intitulé, ce qui ne correspond pas à la méthode générique find se basant sur une clé primaire numérique.

    Modifiez les classes des DAO et des fabriques pour pouvoir intégrer une méthode de recherche de sport par intitulé dans un DAO dédié à la classe Sport. Gardez à l'esprit dans vos modifications que le code d'accès aux données (celui de la classe TestDAO) doit rester utilisable sans modification si on utilise un autre support de persistance qu'un SGBD relationnel avec JDBC.
  5. Rajoutez les deux tables suivantes qui permettent de préciser qu'un sportif pratique différentes disciplines. Rajoutez le POJO d'un sportif dans la liste des classes ainsi que son DAO et modifiez le POJO et le DAO de discipline.

    sportif(integer code_sportif, varchar nom, varchar rue, varchar ville, char[5] code_postal)
    pratique(integer code_discipline,integer code_sportif)