97 lines
2.5 KiB
Markdown
97 lines
2.5 KiB
Markdown
# 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 {
|
|
<<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
|
|
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`
|