2.5 KiB
2.5 KiB
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
classDiagram
class DomainObject {
<<interface>>
+getId() Object
+setId(Object id) void
}
class Mapper~T~ {
<<interface>>
+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
- Compléter
Book.getId()etBook.setId()(DomainObject) - Implémenter les méthodes CRUD dans
BookMapper - Définir le SQL de création de table dans
BookMapper.createTableStmt
Partie 2: Association Book-Publisher
- Créer
PublisherMapper - Modifier
Bookpour ajouter un attributPublisher - Modifier
BookMapperpour gérer l'association - Gérer les règles: sauvegarde en cascade, suppression en cascade
Commandes Maven
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