Ce premier TP consiste à utiliser les connaissances du 1er cours sur Spring Boot pour créer une API très simple, manipulant des données venant d'une BdD relationnelle de type H2. Cette base contient 2 tables qui devraient être normalement reliées par une relation one-to-many, grâce à une clef étrangère, mais qui dans ce TP seront reliées "à la main", dont avec des risques d'incohérence. Les TPs suivants consisteront à étoffer cette API et la base, afin d'utiliser un bon modèle relationnel.
La première étape est de créer le squelette du projet comme dans la démonstration n°2 du TD1, avec les dépendances nécessaires (Spring Web, JPA, H2).
Ensuite, il faut modifier le fichier application.properties
afin d'utiliser une BdD de type H2 en mémoire, avec comme nom rpgbd. La base et les tables doivent être créées au lancement de l'application, et seront remplies grâce au fichier data.sql
suivant :
INSERT INTO categories (name) VALUES
('helmet'), ('crown'), ('armor'), ('clothes'), ('weapon'),('lighter'), ('purse'),('potion'), ('spell'), ('food');
INSERT INTO rpgitems (name, id_category, price, effect) VALUES
('conic helmet',1, 200.0, 'A+10'),
('great crown of apologia', 2, 200.0, 'A+20'),
('leather armor', 3, 100.0, 'A+10'),
('hauberk', 3, 500.0, 'A+40'),
('tuxedo', 4, 600.0, 'L+1'),
('unicorn cosplay', 4, 199.99, 'L+10'),
('dagger', 5 , 100.0, 'S+5'),
('long sword', 5 , 300.0, 'S+20'),
('torch', 6, 2.5, ''),
('leather purse', 7, 10.31, ''),
('protection potion', 8, 100.0, 'a+10'),
('fireball', 9, 1000.0, ''),
('ice cone', 9, 1000.0, ''),
('apple', 10, 1.1, 'l+1'),
('wine', 10, 9.75, 'l+2');
Pour représenter les 2 tables utilisées dans ce TP, il faut créer deux classes d'entité nommés RpgItem
et ItemCategory
. La première classe doit être associée à la table nommée rpgitems
et la seconde à la table categories
.
Chacune de ces classes doit avoir un attribut représentant la clef primaire nommé id
. Pour les autres attributs, leur nom et type peuvent être déduit de ce qu'il y a dans le fichier data.sql
ci-dessus.
Le TP nécessite de créer deux repository pour gérer chacune des tables, nommés ItemCategoryRepository
et RpgItemRepository
. Les deux héritent de JpaRepository
mais seul le deuxième doit déclarer des méthodes supplémentaires pour :
int
),double
),effect = ''
).Le TP nécessite de créer deux services, dont les classes sont nommées ItemCategoryService
et RpgItemService
La première classe définit deux méthodes :
List<ItemCategory> getAllCategories()
: pour récupérer toutes les catégories existantes,void createCategory(String name)
: pour créer une nouvelle catégorie, dont le nom est donné en paramètre. Cette méthode fait quelque chose uniquement si le nom n'existe pas déjà dans la table.