# TD/TP 5 - Persistance Objet-Relationnel ## Objectif Implémenter un système de persistance objet-relationnel pour gérer des livres (Book) et leurs éditeurs (Publisher) en utilisant une base de données Derby. ## Architecture Le projet suit le pattern Data Mapper pour séparer la logique métier de la persistance: - **Classes du domaine**: objets métier (Book, Publisher) - **Classes Mapper**: gestion de la persistance (BookMapper, PublisherMapper) - **Interfaces**: contrats pour les objets persistants (DomainObject, Mapper) - **Utilitaire DB**: gestion de la connexion à Derby ## Structure du code ```mermaid classDiagram class DomainObject { <> +getId() Object +setId(Object id) void } class Mapper~T~ { <> +insert(T newObject) Object +find(Object oid) T +findMany(Object criterion) Set~T~ +update(T objToUpdate) void +delete(T objToDelete) void +deleteAll() void } class Book { -String isbn -String title -String author -float price +getId() Object +setId(Object id) void +getIsbn() String +getTitle() String +getAuthor() String +getPrice() float } class BookMapper { -DB db +insert(Book newBook) Object +find(Object isbn) Book +findMany(Object authorName) Set~Book~ +update(Book bookToUpdate) void +delete(Book bookToDelete) void +deleteAll() void } class DB { +getConnection() Connection +createTable(String sql) void } DomainObject <|.. Book Mapper <|.. BookMapper BookMapper --> Book : persiste BookMapper --> DB : utilise ``` ## Travail à réaliser ### Partie 1: Persistance de Book 1. Compléter `Book.getId()` et `Book.setId()` (DomainObject) 2. Implémenter les méthodes CRUD dans `BookMapper` 3. Définir le SQL de création de table dans `BookMapper.createTableStmt` ### Partie 2: Association Book-Publisher 1. Créer `PublisherMapper` 2. Modifier `Book` pour ajouter un attribut `Publisher` 3. Modifier `BookMapper` pour gérer l'association 4. Gérer les règles: sauvegarde en cascade, suppression en cascade ## Commandes Maven ```bash mvn clean # Nettoyer les compilations mvn compile # Compiler le projet mvn test # Exécuter les tests ``` ## Base de données - Nom: Roux - SGBD: Apache Derby 10.16.1.1 - Port: 1527 - Driver: `jdbc:derby://localhost:1527/Roux`